Я вижу, что было несколько вопросов, основанных на этой теме, но у меня есть несколько конкретных примеров, с которыми я борюсь. Я надеюсь, что кто-то может помочь мне здесь, поскольку я новичок в тестировании управляемой разработки и модульного тестирования в целом.
(Я не уверен, имеет ли это значение, но я использую C # с .NET Framework 4.0 и использую встроенную среду тестирования Microsoft)
Прежде всего, стоит ли тестировать очень простые блоки кода? Например, для одного из моих классов у меня есть метод Fill, который принимает 10 параметров и устанавливает значения для 10 свойств в классе на основе этих параметров. Код заполнения на самом деле представляет собой просто серию операторов установки значений. Я читал, что хороший модульный тест должен утверждать только одну вещь, но мне кажется, чтобы проверить, что все эти значения установлены правильно, я должен утверждать 10 вещей. Так что либо я вообще не могу его протестировать, полагая, что код достаточно прост, либо напишите 10 различных модульных тестов для проверки каждого свойства. Являются ли какие-либо из них правильными?
Второй пример. У меня есть блок кода, который выполняет несколько вызовов приватных методов класса и, наконец, вызывает веб-сервис, чтобы отправить электронное письмо пользователю. Я понимаю, что мне нужно внедрить фиктивный веб-сервис для службы электронной почты, чтобы я не тестировал несколько классов, но как мне проверить, что все эти частные методы и этот вызов по электронной почте выполнены?
Третий пример похож на последний. Моя классовая структура выглядит примерно так:
Контроллер --- зависит от ---> IWidget (некоторый бизнес-объект) && IDataProvider
DataProvider (реализует IDataProvider) --- зависит от ---> WebService
WebService --- напрямую звонит ---> База данных
Сейчас у меня есть модульные тесты для контроллера (внедрение фиктивных виджетов и провайдеров данных).
Так что все хорошо. У меня также есть модульные тесты для Widget без проблем.
Проблема заключается в DataProvider и WebService. WebService в данном конкретном случае ничего не делает, но проходит через запросы поставщика данных и возвращает данные (из-за ограничений физической архитектуры).
У меня проблемы с модульным тестированием DataProvider, потому что я не знаю, как сделать инъекцию поддельного веб-сервиса. Я также не уверен, стоит ли проводить модульное тестирование DataProvider, потому что мне пришлось бы кодировать множество макетированных наборов данных только для проверки значений. Точно так же я не уверен, как выполнить модульное тестирование веб-службы, потому что в этом случае основная функция WebService зависит от базы данных. Еще раз, стоит ли это тестировать? Что, если WebService сделал больше, кроме того, что он просто служил проходом, но все еще зависел от базы данных?
Я был бы очень признателен за любые советы, которые кто-либо может дать в этом отношении. Большое спасибо.