У меня есть следующие вопросы, связанные с тестированием модулей кода для классов, которые в значительной степени интегрированы с логикой базы данных. Например. Мой метод класса вызывает другой класс, который выполняет запрос базы данных или хранимую процедуру.Тестирование закодированных блоков, база данных и инжекция зависимостей
Если я не хочу привлекать реальную базу данных во время модульного тестирования, какие параметры?
Многие люди используют подход, основанный на интерфейсе, в котором мне придется объявить интерфейс. Затем во время модульного тестирования мне придется предоставить реализацию интерфейса, который не работает с реальной базой данных.
Я знаю, что в реальном мире у меня не будет различных реализаций того же интерфейса. Так что конкретный класс в порядке для меня. Но целесообразно ли объявлять интерфейс только для модульного тестирования?
Если мы объявляем интерфейс и записываем единичные тесты, используя его, я могу решить реализацию во время выполнения теста, тогда нам, возможно, придется подумать о контейнерах IoC для ввода конкретного класса во время выполнения. Теперь это делает приложение излишне сложным.
Как с этим бороться?
Это вопрос вкуса, я думаю. По моему опыту, дополнительное время, затрачиваемое на извлечение интерфейса, минимально по сравнению с уменьшенной сложностью модульных тестов. См. Также [this] (http://programmers.stackexchange.com/questions/159813/do-i-need-to-use-an-interface-when-only-one-class-will-ever-implement-it) обсуждение обмена программатором – Hintham
только потому, что вы вводите интерфейс, это не значит, что вам нужен контейнер IoC внезапно. Контейнер IoC - это инструмент, который может помочь упростить построение графа сложного объекта, но это может ВСЕГДА быть сделано без контейнера. И в ваших модульных тестах вы должны создавать небольшие простые графические объекты (поскольку вы только тестируете небольшие единицы), вам не нужно использовать контейнер IoC для создания графиков объектов. Просто «новый» тестируемые объекты с издеваемыми зависимостями –