SimpleInjector: комплексное тестирование методов контроллера в тестовой базе данных - PullRequest
0 голосов
/ 13 июня 2018

У меня есть веб-приложение с несколькими контроллерами REST API.Эти контроллеры получили внедренные репозитории согласно этому руководству с использованием SimpleInjector.Я хотел бы добавить в проект несколько сквозных тестов, чтобы убедиться, что вызовы методов контроллера влияют на базу данных предсказуемым образом (сначала я использую EF6, MySQL, код).Я собирался использовать этот план для тестирования моего приложения.Мне нравится общий подход, но кажется, что в этом подходе автор вводит контекст БД непосредственно в контроллер.В моем случае у меня есть контроллер, который получает встроенный репозиторий от конструктора и, в свою очередь, репозиторий получает внедренный DbContext.Очевидно, что я могу жестко закодировать цепочку создания DbContext, создать экземпляр Repository, а затем создать экземпляр Controller, но это не соответствует цели использования SimpleInjector, не так ли?Я думаю, что должен быть способ сделать это более прозрачным способом.

По сути, я хотел бы добавить отдельную базу данных в мои тесты.Когда сервер работает, он использует одну базу данных, когда тесты используют другую специальную базу данных.

У меня есть тестовые классы в отдельном проекте, поэтому мне потребуется способ создания экземпляров моих контроллеров иХранилища из основного проекта.Я не уверен, как я могу это сделать.Является ли хорошей идеей каким-то образом выставить мой SimpleInjector.Container из другого проекта?

Дополнительная информация: Я использую .Net Framework (не-Core), я хотел бы сейчас управлять безшумным издевательством, если это не требуется.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

В вашем случае, я бы ожидал, что вам не нужно ничего делать конкретно.Ваши сквозные тесты будут вызывать тестовую версию веб-приложения по HTTP, и это тестовое приложение настроено со строкой соединения, которая указывает на тестовую базу данных.Таким образом, вы можете использовать точно такую ​​же конфигурацию DI без каких-либо изменений.Вы, конечно, не хотите вводить другой DbContext во время тестирования.

Другой вариант - это тестирование в памяти, что означает, что вы не вызываете веб-приложение через HTTP, а вместо этого запрашиваете контроллер напрямуюот простого инжектора и вызвать его методы.Здесь сохраняется то же самое: единственное, что вы хотите изменить, - это строка подключения, которая должна быть уже настроена.

0 голосов
/ 13 июня 2018

Вы можете абстрагировать DbContext за интерфейсом и использовать опцию SimpleInjector, чтобы переопределить регистрации для ваших тестов.Это позволит вам зарегистрировать другую реализацию вашего контекста для тестирования.Затем в своем коде настройки теста вызовите свои стандартные регистрации, предполагая, что они все находятся в вашем корне композиции и / или в проекте начальной загрузки.Затем нажмите переключатель блокировки и зарегистрируйте контекст теста.

Регистрации отмены - только для тестирования

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