集成测试实体框架 - 仅为PROD分离种子方法调用 -

Pas*_*cal 14 integration-testing entity-framework entity-framework-6

我想集成测试我的存储库.

我想在每个集成测试方法之前设置和插入测试数据.然后我想执行我的存储库逻辑然后我想断言逻辑通过从数据库返回正确的数据来工作.

我不想模拟和单元测试DbSet ;-)只是真正的集成测试.

我的问题是关于数据库的整个设置和清除测试数据.

我使用代码第一种方法生成TestDatabaseProdDatabase.在ProdDatabase中,我将真实数据播种,然后在UI中播放,并检查正确的行为.TestDatabase仅用于集成测试.

两个数据库都是从ONE上下文创建的.

当我更改实体的任何属性并运行集成测试时,也会调用来自我的DbContext的覆盖的Seed方法.但我不希望我的TestDatabase.

如何才能将Seed调用分开仅针对我的ProdDatabase?我的TestDatabase每次测试都会生成自己的"种子"/设置数据?

jjj*_*jjj 6

在每种情况下,您都可以在应用程序启动期间设置不同的 IDatabaseInitializerDbMigrationsConfiguration(如果您MigrateDatabaseToLatestVersion用于初始化程序):

System.Data.Entity.Database.SetInitializer(new TestOrProdInitializer());
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用不同的配置文件设置为生产与测试设置数据库初始化程序:

<contexts> 
  <context type=" Blogging.BlogContext, MyAssembly"> 
    <databaseInitializer type="Blogging.MyCustomBlogInitializer, MyAssembly" /> 
  </context> 
</contexts>
Run Code Online (Sandbox Code Playgroud)

如果在删除数据库后需要重新设置,则还可以强制进行初始化dbContext.Database.Initialize(true).