Наразі в нашій команді тривають дискусії щодо того, чи модифікація кодової конструкції для тестування одиниць є запахом коду, або в якій мірі це можна зробити, не маючи запаху коду. Це сталося тому, що ми лише починаємо впроваджувати практики, які існують майже у всіх інших розробниках програмного забезпечення.
Зокрема, у нас буде служба Web API, яка буде дуже тонкою. Основним його обов'язком буде маршал веб-запитів / відповідей та виклик базового API, що містить бізнес-логіку.
Одним із прикладів є те, що ми плануємо створити завод, який поверне тип методу аутентифікації. У нас немає необхідності, щоб він успадковував інтерфейс, оскільки ми не передбачаємо, що він коли-небудь буде іншим, ніж конкретний тип, яким він буде. Однак для тестування сервісу Web API нам потрібно буде знущатися над цим заводом.
Це по суті означає, що ми або проектуємо клас контролера Web API для прийняття DI (через його конструктор або сетер), а це означає, що ми розробляємо частину контролера просто для того, щоб дозволити DI та реалізувати інтерфейс, який нам інакше не потрібен, або ми використовуємо третій фреймворк, як Ninject, щоб уникнути необхідності проектувати контролер таким чином, але нам все одно доведеться створити інтерфейс.
Дехто з команди здається неохоче розробляти код лише заради тестування. Мені здається, що повинен бути якийсь компроміс, якщо ви сподіваєтесь на тестування, але я не впевнений, як стримувати їхні проблеми.
Щоб було зрозуміло, це абсолютно новий проект, тож насправді мова не про зміну коду для включення тестування одиниць; йдеться про розробку коду, який ми будемо писати, щоб бути перевіреним одиницею.