Uwagi wstępne
Nie będę się rozróżniał różnych rodzajów testów, na tych stronach jest już kilka pytań na ten temat.
Wezmę to, co tam jest i co mówi: testowanie jednostkowe w sensie „testowanie najmniejszej możliwej do wydzielenia jednostki aplikacji”, z której faktycznie pochodzi to pytanie
Problem izolacji
Jaka jest najmniejsza możliwa do wydzielenia jednostka programu. Cóż, jak widzę, to (wysoce?) Zależy od tego, w jakim języku kodujesz.
Micheal Feathers mówi o koncepcji szwu : [WEwLC, s. 31]
Szew to miejsce, w którym możesz zmienić zachowanie w swoim programie bez edycji w tym miejscu.
I bez wchodzenia w szczegóły, rozumiem szew - w kontekście testów jednostkowych - jako miejsce w programie, w którym „test” może łączyć się z „jednostką”.
Przykłady
Test jednostkowy - szczególnie w C ++ - wymaga od testowanego kodu dodania kolejnych szwów, które byłyby ściśle wymagane dla danego problemu.
Przykład:
- Dodanie interfejsu wirtualnego, w którym wystarczyłoby wdrożenie inne niż wirtualne
- Dzielenie - uogólnianie (?) - (mała) klasa dalej „tylko” w celu ułatwienia dodania testu.
- Dzielenie jednego pliku wykonywalnego na pozornie „niezależne” biblioteki lib, „tylko” w celu ułatwienia samodzielnej kompilacji ich na potrzeby testów.
Pytanie
Wypróbuję kilka wersji, które, mam nadzieję, zapytają o ten sam punkt:
- Jest to sposób, w jaki testy jednostkowe wymagają, aby struktura kodu aplikacji „tylko” była korzystna dla testów jednostkowych, czy faktycznie jest korzystna dla struktury aplikacji.
- Czy uogólnienie kodu, które jest potrzebne, aby można go było testować jednostkowo, jest przydatne do wszystkiego oprócz testów jednostkowych?
- Czy dodanie testów jednostkowych zmusza do niepotrzebnego uogólnienia?
- Czy testy jednostek kształtu wymuszają na kodzie „zawsze” również dobry ogólny kod, patrząc z dziedziny problemowej?
Pamiętam ogólną zasadę, która mówi: nie generalizuj, dopóki nie będziesz musiał / dopóki nie będzie drugiego miejsca, w którym użyjesz kodu. W przypadku testów jednostkowych zawsze jest drugie miejsce, które korzysta z kodu - mianowicie test jednostkowy. Czy to wystarczający powód do uogólnienia?