Как автоматически проверить, что я не забыл добавить основной код ef для первой миграции - PullRequest
0 голосов
/ 11 ноября 2019

Сначала мы используем Entity Framework Core 2.2 с кодом. Иногда я изменяю одну из сущностей, но забываю создать новую миграцию, или я создаю миграцию, но только в одном контексте (у нас для разных механизмов БД). Я хочу проверить это автоматически (в идеале, как тест NUnit), чтобы он работал на нашем CI-сервере для каждого коммита.

Вручную я попытался бы создать новую миграцию и проверить, что созданные методы Up () и Down () пусты. Есть ли способ сделать это как тест NUnit?

1 Ответ

1 голос
/ 11 ноября 2019

Где возникают трудности при создании теста, который:

  1. Создает новую БД
  2. Применяет все текущие миграции для создания схемы
  3. Пытается использовать всеюридические лица. Это может быть так же просто, как добавить сущность, запросить эту сущность и глубоко сравнить их.
  4. Удаляет базу данных

Если схема не имеет миграции дляновая сущность или изменение сущности, вы обязательно получите и ошибку SQL из этого.

Конечно, каждый раз, когда вы создаете новую сущность, вам нужно будет добавить новый тест. Но это должно произойти, если вы используете TDD.

И скорость также не должна быть проблемой, так как создание и удаление БД не должно занимать более нескольких секунд, и не будет многотакого рода тесты. И они могут быть распараллелены.

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

  1. Использоватьотражение для получения всех типов сущностей, поддерживаемых контекстом.
  2. Используйте автоматический генератор данных, например Bogus или AutoFixture , чтобы заполнить сущности данными.
  3. Обход объектов по БД.
  4. Сравнение оригинала с полученным с использованием Deep-Comparer, например Compare-Net-Objects .

Полезность такого автоматизированногоподход будет зависеть от сложности вашей модели данных. Будет просто работать для простой модели. Но потребуется много настроек и переопределений, если модель сложная.

...