In Bezug auf Komponententests wurde mir beigebracht, dass der Produktionscode keinen testbezogenen Code enthalten sollte.Sind einzelne Implementierer-Schnittstellen für Unit-Tests eines Antipatterns?
Nun, ich fühle mich wie ich diese Regel jedes Mal brechen, wenn ich versuche, Unit-Test.
Ich habe eine interne Klasse zu meiner Baugruppe, Xyzzy
. Ich möchte die Abhängigkeit in eine andere Klasse injizieren und dann stub sie, damit ich die andere Klasse isoliert testen kann, also mache ich eine Schnittstelle, IXyzzy
. Hoppla, jetzt habe ich Code in der Produktion, der wirklich nur zum Testen da ist. Noch schlimmer, ich bin irgendwie gegen welche Schnittstelle ist (beschreibt, was ein Implementierer kann tun, nicht was es ist). Xyzys öffentliche Schnittstelle und IXyzzy sind genau gleich und niemand außer den Stubs implementiert IXyzzy.
Das scheint mir eine schlechte Sache.
ich eine abstrakte Basisklasse schaffen könnte oder alle öffentlichen Methoden mache ich auf Xyzzy Overridable
/virtual
testen wollen, aber das fühlt sich falsch zu, da Xyzzy nicht für die Vererbung und aus einer YAGNI Perspektive konzipiert ist, wird nicht immer von vererbt werden.
Erstellen von Schnittstellen für einzelne Implementierer ausschließlich zum Testen eines Anti-Patterns? Gibt es bessere Alternativen?
Sehr wahr, viele meiner Schnittstellen, z.B. 'IRequestor', beschreiben Sie, was es tut;) –