W naszym zespole toczy się obecnie debata na temat tego, czy modyfikacja projektu kodu w celu umożliwienia testowania jednostkowego jest zapachem kodu lub w jakim stopniu można to zrobić bez zapachu kodu. Stało się tak, ponieważ dopiero zaczynamy wprowadzać praktyki, które są obecne w prawie każdej innej firmie programistycznej.
W szczególności będziemy mieć usługę interfejsu API sieci Web, która będzie bardzo cienka. Jego głównym zadaniem będzie zbieranie żądań / odpowiedzi internetowych i wywoływanie bazowego interfejsu API zawierającego logikę biznesową.
Jednym z przykładów jest to, że planujemy stworzyć fabrykę, która zwróci typ metody uwierzytelnienia. Nie musimy dziedziczyć interfejsu, ponieważ nie spodziewamy się, że będzie to coś innego niż konkretny typ. Aby jednak przetestować usługę Web API, będziemy musieli kpić z tej fabryki.
Zasadniczo oznacza to, że albo projektujemy klasę kontrolera Web API, aby akceptować DI (przez jego konstruktora lub settera), co oznacza, że projektujemy część kontrolera tylko po to, aby umożliwić DI i implementację interfejsu, którego w innym przypadku nie potrzebujemy, lub używamy frameworkiem zewnętrznym, takim jak Ninject, aby uniknąć konieczności zaprojektowania kontrolera w ten sposób, ale nadal będziemy musieli stworzyć interfejs.
Niektórzy członkowie zespołu wydają się niechętnie projektować kod tylko dla celów testowych. Wydaje mi się, że musi być jakiś kompromis, jeśli masz nadzieję na test jednostkowy, ale nie jestem pewien, jak złagodzić ich obawy.
Dla jasności, jest to zupełnie nowy projekt, więc tak naprawdę nie chodzi o modyfikację kodu, aby umożliwić testowanie jednostkowe; chodzi o zaprojektowanie kodu, który napiszemy, aby był testowany jednostkowo.