Избегайте использования HasData Seed DbContext в EF Core 2.2 во время модульных тестов - PullRequest
1 голос
/ 26 марта 2019

В моем приложении веб-API ASP.Net CORE 2.2 / EF Core 2.2 у меня есть метод HasData () в моем DbContext для заполнения базы данных некоторыми стандартными данными, которые я использую. Однако я не хочу использовать эти данные при выполнении моих тестов xUnit.

Мои модульные тесты используют провайдер Sqlite in-memory и как часть этого процесса требуют вызова EnsureCreated (). Итак, EnsureCreated () вызывает OnModelCreating (), который вызывает HasData (), поэтому мой контекст модульного теста теперь содержит все мои начальные данные HasData, которые мне не нужны. Я хочу, чтобы мои модульные тесты были заполнены другими, очень конкретными данными.

Поскольку EnsureCreated () заполняет контекст, а затем я пытаюсь добавить специфические начальные данные для моего модульного теста, я получаю оба набора данных в моем тесте DbContext, и мои тесты не пройдены.

Как я могу обойти вызов HasData для моих модульных тестов?

1 Ответ

0 голосов
/ 04 апреля 2019

Вы всегда можете смоделировать вызов с помощью Mock, это обеспечит способ смоделировать интерфейс, делая его таким образом, что вызовы функций упомянутого смоделированного интерфейса будут фактически вызывать вашу смоделированную функцию. Это позволит вам переопределить вызов функции на HasData.

Конечно, это означает, что если он еще не использует интерфейс для этих функций, вам придется обернуть его в одну.

Вот несколько полезных примеров для Mocking: написание модульных тестов с NUnit и Moq и введение в модульное тестирование с помощью mock (с использованием moq) .

Я также подозреваю, что атрибут Theory и встроенные данные могут быть вам полезны. Создание параметризованных тестов в xUnit

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...