【发布时间】:2015-04-15 10:36:27
【问题描述】:
我正在尝试使用 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 数据库,因为使用不同的数据库进行测试可能会给我带来误报。
【问题讨论】:
标签: c# sql-server entity-framework ef-code-first integration-testing