Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHPUnit] Testowanie klas abstrakcyjnych - czy w ogóle to robić?
Forum PHP.pl > Forum > PHP
czychacz
Pytanie od człowieka, który jakiś czas temu zaczął bawić się testowaniem aplikacji z PHPUnit:
Czy powinienem testować klasy abstrakcyjne?
Teoretycznie podczas testu mógłbym tworzyć klasę, która dziedziczy po abstrakcyjnej, ale czy jest sens, skoro i tak testuję klasy pochodne?
vokiel
Masz na myśli pewnie testy jednostkowe.

Są dwie drogi, jedni mówią, żeby testować tylko poprzez publiczne API. Inni żeby w testach jednostkowych testować każdą najmniejszą część (klasy abstrakcyjne, metody prywatne/chronione) bezpośrednio.
W obu przypadkach przetestujesz taką metodę, czy to klasy abstrakcyjnej, czy po prostu protected/private. Bezpośrednio może być łatwiej i czytelniej, pośrednio może to wymagać ciut więcej pracy (zależy od tego jak rozbudowany jest kod wykorzystujący te metody).

Różnica jest jeszcze w ilości pracy potrzebnej na utrzymanie kodu i testów w dłuższym czasie. Gdy testujesz prywatne/chronione/abstrakcyjne poprzez publiczne API to po ich zmianach może się okazać, że modyfikacja testów nie będzie potrzebna. Gdy testuje się te metody bezpośrednio, to zwykle takiej opcji nie ma.

lukaskolista
Testuje się interface (publiczne metody) z prostego powodu: interesuje Cię to, jak klasa jest zorganizowana, czy jak działa? Testowanie niepublicznych metod uwala możliwość refaktoryzacji bez zmiany testów - robiąc refaktoryzację wnętrza klasy taka klasa dalej działa tak samo.

@vokiel
Pierwsze słyszę o tej drugiej drodze, to raczej jakieś próby pisania poważnych testów przez osoby początkujące w tym temacie.

Jeżeli dalej masz wątpliwości to spróbuj testować niepubliczne metody, a następnie spróbuj wprowadzać modyfikację w swoim kodzie - powodzenia smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.