В настоящее время в нашей команде ведутся дебаты о том, является ли изменение дизайна кода, позволяющее модульное тестирование, запахом кода, или в какой степени это может быть сделано без запаха кода. Это произошло потому, что мы только начинаем внедрять практики, которые присутствуют практически во всех других компаниях, занимающихся разработкой программного обеспечения.
В частности, у нас будет служба Web API, которая будет очень тонкой. Его основной обязанностью будет составление веб-запросов / ответов и вызов базового API, который содержит бизнес-логику.
Одним из примеров является то, что мы планируем создать фабрику, которая будет возвращать тип метода аутентификации. Нам не нужно, чтобы он наследовал интерфейс, так как мы не ожидаем, что он когда-либо будет отличаться от конкретного типа, которым он будет. Однако для модульного тестирования сервиса Web API нам нужно будет смоделировать эту фабрику.
По сути, это означает, что мы либо проектируем класс контроллера Web API для приема DI (через его конструктор или установщик), что означает, что мы разрабатываем часть контроллера просто для того, чтобы разрешить DI и реализовать интерфейс, который нам не нужен в противном случае, или мы используем сторонний фреймворк, такой как Ninject, чтобы избежать необходимости проектировать контроллер таким образом, но нам все равно придется создавать интерфейс.
Некоторые в команде, похоже, не хотят разрабатывать код только для тестирования. Мне кажется, что должен быть какой-то компромисс, если вы надеетесь провести модульное тестирование, но я не уверен, как развеять их опасения.
Просто чтобы прояснить, это совершенно новый проект, так что на самом деле речь не идет об изменении кода для включения модульного тестирования; речь идет о разработке кода, который мы собираемся написать для модульного тестирования.