Интеграция тестирования структуры сущности - отделить вызов метода семени только для PROD -

Я хочу интеграционный тест мои репозитории.

Я хочу настроить и вставить тестовые данные перед каждым методом интеграции. Затем я хочу выполнить логику моего репозитория Затем я хочу утверждать, что логика работает, возвращая правильные данные из базы данных.

Я не хочу издеваться и unit test DbSet;-) просто настоящие интеграционные тесты.

Мой вопрос касается всей настройки базы данных и очистки тестовых данных.

Я использую первый подход кода, создавая TestDatabase и ProdDatabase. В фактических данных ProdDatabase я seed, а затем с ним в пользовательском интерфейсе и проверьте правильность поведения. База TestDatabase предназначена только для тестов интеграции.

Базы данных создаются из контекста ОДИН.

Когда я изменяю любое свойство объекта, и я запускаю свои тесты интеграции, вызывается также перезаписанный метод Seed из моего DbContext. Но я не хочу этого для своей тестовой базы данных.

Как я могу отделить вызов Seed только для моей базы данных ProdDatabase? И моя TestDatabase генерирует собственные данные "семян" /настройки для каждого теста?

Ответы

Ответ 1

В каждом случае вы можете установить другой IDatabaseInitializer или DbMigrationsConfiguration (если вы используете MigrateDatabaseToLatestVersion для своего инициализатора) во время запуска приложения:

System.Data.Entity.Database.SetInitializer(new TestOrProdInitializer());

Вы даже можете установить инициализатор базы данных с помощью различных конфигурационных файлов для производства и теста:

<contexts> 
  <context type=" Blogging.BlogContext, MyAssembly"> 
    <databaseInitializer type="Blogging.MyCustomBlogInitializer, MyAssembly" /> 
  </context> 
</contexts>

Если вам нужно выполнить повторную загрузку после удаления базы данных, вы также можете принудительно инициализировать с помощью dbContext.Database.Initialize(true).