Интеграция тестирования структуры сущности - отделить вызов метода семени только для 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)
.