In unserem Team wird derzeit diskutiert, ob das Ändern des Code-Designs, um das Testen von Einheiten zu ermöglichen, ein Codegeruch ist oder inwieweit dies ohne Codegeruch möglich ist. Dies ist darauf zurückzuführen, dass wir gerade erst damit beginnen, Praktiken einzuführen, die in nahezu jedem anderen Softwareentwicklungsunternehmen vorhanden sind.
Insbesondere werden wir einen Web-API-Dienst haben, der sehr dünn sein wird. Seine Hauptaufgabe besteht darin, Webanforderungen / -antworten zusammenzustellen und eine zugrunde liegende API aufzurufen, die die Geschäftslogik enthält.
Ein Beispiel ist, dass wir eine Factory erstellen möchten, die einen Authentifizierungsmethodentyp zurückgibt. Wir müssen keine Schnittstelle erben, da wir nicht davon ausgehen, dass es jemals etwas anderes als die konkrete Art sein wird, die es sein wird. Zum Testen des Web-API-Dienstes müssen wir uns jedoch über diese Factory lustig machen.
Dies bedeutet im Wesentlichen, dass wir entweder die Web-API-Controller-Klasse so entwerfen, dass sie DI akzeptiert (über ihren Konstruktor oder Setter). Dies bedeutet, dass wir einen Teil des Controllers so entwerfen, dass DI zugelassen wird und eine Schnittstelle implementiert wird, die wir sonst nicht benötigen, oder dass wir sie verwenden ein Framework eines Drittanbieters wie Ninject, um zu vermeiden, dass der Controller auf diese Weise entworfen werden muss, aber wir müssen immer noch eine Schnittstelle erstellen.
Einige im Team scheinen nur zu Testzwecken ungern Code zu entwerfen. Es scheint mir, dass es Kompromisse geben muss, wenn Sie auf einen Unit-Test hoffen, aber ich bin mir nicht sicher, wie sie ihre Bedenken zerstreuen können.
Dies ist ein brandneues Projekt. Es geht also nicht wirklich darum, Code zu ändern, um Unit-Tests zu ermöglichen. Es geht darum, den Code, den wir schreiben werden, so zu gestalten, dass er für Einheiten testbar ist.