繁体   English   中英

如何使用Entity Framework Code First V6.1.2进行集成测试

[英]How to do integration test using Entity Framework Code First V6.1.2

我正在尝试使用EF代码优先6.1.2为我的数据库访问逻辑添加一些集成测试。 我想在一个单独的数据库上执行此操作,这样就不会用测试数据弄乱生产数据库。

同样,测试应该是可重复的,这意味着如果不存在则应该创建数据库,为测试数据添加种子,运行测试并在完成后最终将其删除。

我也没有测试数据库没有Enable-Migrations命令也无法做到这一点。

这将是我的dbContext用于生产:

public partial class ApplicationDbContext : 
        IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>, IApplicationDbContext
{
    public ApplicationDbContext() : base("name=DefaultConnection") { }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        if (base.Database.Connection.ConnectionString == "DefaultConnectionTest")
            Database.SetInitializer(new DropCreateDatabaseAlways<ApplicationDbContext>());
        else
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());

        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<ApplicationUser>().ToTable("Users");
        modelBuilder.Entity<ApplicationRole>().ToTable("Roles");
        modelBuilder.Entity<ApplicationUserRole>().ToTable("UserRoles");
        modelBuilder.Entity<ApplicationUserLogin>().ToTable("UserLogins");
        modelBuilder.Entity<ApplicationUserClaim>().ToTable("UserClaims");
    }

    public DbSet<Order> Orders { get; set; }
    public DbSet<Product> Products { get; set; }
    public DbSet<Person> Persons { get; set; }
}

我已经使用Ninject Dependency Injection设置了一切。 使用连接字符串作为参数public ApplicationDbContext(string dbConnection) : base(dbConnection) { }添加一个额外的构造函数,仍然会让我运行Enable-Migrations命令。

有什么办法可以自动化这个过程? 还是有人可以提出其他建议?

我想坚持使用SQL Server数据库,因为使用其他数据库进行测试可能会给我带来误报。

您必须使用数据库初始化程序。 有一些可用的:

Database.SetInitializer(new CreateDatabaseIfNotExists<InterstoneContext>());
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<InterstoneContext>());
Database.SetInitializer(new DropCreateDatabaseAlways<InterstoneContext>());

您需要第三个选择。 请注意您的连接字符串,不要覆盖生产数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM