W odniesieniu do testów jednostkowych, uczono mnie, że kod produkcyjny nie powinien zawierać kodu związanego z testem.Czy istnieją interfejsy jednego implementatora do testowania urządzenia przeciwdziałającego?
Cóż, mam wrażenie, że łamam tę zasadę za każdym razem, gdy próbuję przeprowadzić test jednostkowy.
Mam klasy wewnętrznej do mojego zespołu, Xyzzy
. Chcę zależności wstrzyknąć go do innej klasy, a następnie po prostu go zamknąć, aby przetestować drugą klasę w izolacji, więc mam interfejs, IXyzzy
. Ups, teraz mam kod w produkcji, który jest naprawdę tylko do testów. Co gorsza, mam niby poszedł na co interfejs (opisuje co za wdrażająca może zrobić, a nie to, co jest). Publiczny interfejs Xyzzy i IXyzzy są dokładnie takie same i nikt inny (z wyjątkiem skrótów) nie implementuje IXyzzy.
To wydaje mi się złe.
Mogę utworzyć abstrakcyjną klasę bazową lub utworzyć wszystkie publiczne metody, które chcę przetestować na Xyzzy Overridable
/virtual
, ale to też nie działa, ponieważ Xyzzy nie jest przeznaczony do dziedziczenia iz perspektywy YAGNI nigdy nie będzie być odziedziczonym po.
jest tworzenie interfejsów pojedynczych Realizator wyłącznie do celów testowania anty-wzorzec? Czy istnieją lepsze alternatywy?
Bardzo prawdziwe, wiele moich interfejsów, np. 'IRequestor', opisać co robi;) –