Yus*_*tme 1 c# sql-server integration-testing entity-framework ef-code-first
我正在尝试使用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; }
}
Run Code Online (Sandbox Code Playgroud)
我把一切都建立了使用Dependency Injection从Ninject.使用连接字符串作为参数添加额外的构造函数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>());
Run Code Online (Sandbox Code Playgroud)
你需要第三个选择.请注意不要覆盖生产数据库的connectionstring.
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |