EntityFramework单元测试示例

时间:2012-12-23 22:02:13

标签: database entity-framework azure nunit

我刚刚解决了我自己的问题,但我认为我可能仍然会对其他人有所帮助,所以决定发布它。


我正在尝试开始使用azure开发,目前正处于启动和运行数据库的阶段。几次结束后,我实现了以下目标:

  • 安装了VS2012,MSSQLSERVER2012,Azure SDK .NET,EntityFramework 6.0.0 alpha以及其他一些东西
  • 编写了我的第一个实体(代码优先)并从中生成了一个数据库。

在我接受下一个挑战之前,我想看到的最后一件事是首先在我新创建的数据库中添加一些东西。我认为最简单的方法是在nunit中编写测试。

这是我到目前为止所得到的......

实体类用户

namespace Models.Users
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string EmailAddress { get; set; }
    }
}

实体类 UsersDb

using System.Data.Entity;

namespace Models.Users
{
    public class UsersDb : DbContext
    {
         public DbSet<User> Users { get; set; }
    }
}

使用以下PS命令生成数据库:

enable-migrations -ProjectName Models -ContextTypeName Models.Users.UsersDb
add-migration -ProjectName Models Initial
update-database -ProjectName Models 

最后,我写了以下单元测试

using Models.Users;
using NUnit.Framework;

namespace Tests
{
    [TestFixture]
    public class DatabaseTests
    {
        [Test]
        public void AddUserTest()
        {
            var users = new UsersDb();
            var user = new User
                {
                    Id = 1, 
                    Name = "test", 
                    EmailAddress = "test@gmail.com"
                };

            users.Users.Add(user);
            users.SaveChanges();
        }
    }
}

该测试运行,但抛出了一个我无法弄清楚的异常。

System.InvalidOperationException:实体框架提供程序为'System.Data.SqlClient'键入'System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'无法加载ADO.NET提供程序。确保提供程序程序集可用于正在运行的应用程序。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882

解决方案

我要解决这个问题,是打开NuGet管理(右键单击解决方案)并按下EntityFramework上的管理按钮。在对话框中,在测试解决方案前添加一个复选框,重建并继续。

现在,我有一个非常小的解决方案,通过单元测试创​​建一个新用户并将其保存到我的数据库中。一个很好的启动项目,我现在可以开始扩展。

1 个答案:

答案 0 :(得分:3)

在键入问题本身时解决了问题。我以为我仍然可以作为其他人的参考。