Czy metoda testowania do testowania funkcji przez testowanie funkcji, która nazywa ją testem jednostkowym, nadal?

11

Jeśli testujemy funkcję B, testując funkcję C, która wywołuje tę funkcję B, tj. Pisząc program testowy w celu przetestowania funkcji C, która wywołuje tę funkcję B, to czy metoda testowa jest nadal nazywana testem jednostkowym, czy coś innego?

Kiedy preferuje się testowanie pośrednio funkcji wywołującej funkcję docelową, a kiedy testowanie funkcji jest bezpośrednie?

Tim
źródło

Odpowiedzi:

9

Popularną definicją testu jednostkowego jest definicja ISTQB:

Test jednostkowy jest najmniejszą testowalną częścią aplikacji, taką jak funkcje, klasy, procedury, interfejsy. Testowanie jednostkowe to metoda, według której poszczególne jednostki kodu źródłowego są testowane w celu ustalenia, czy nadają się do użycia.

Zgodnie z tą definicją:

  • jeśli napiszesz program testowy dla B, jest to test jednostkowy (B).
  • jeśli napiszesz program testowy dla C, jest to test jednostkowy (C).

Teraz może istnieć różnica między zamiarem a zakresem testu. Jeśli napiszesz program testowy dla B za pomocą C, nadal jest to test jednostkowy C, ponieważ wszystko, co możesz zrobić, to podać dane wejściowe do C i sprawdzić na podstawie danych wyjściowych, czy B był poprawny. Po prostu wnioskujesz, że B działa, ponieważ działa C.

Istnieje również definicja testu integracji :

Testy przeprowadzone w celu ujawnienia defektów interfejsów i interakcji między zintegrowanymi komponentami lub systemami.

Zwykła definicja komponentów oprogramowania oznacza, że ​​jest on niezależny i może być wdrażany samodzielnie. Tutaj B i C nie wydają się być niezależnymi komponentami, więc nie mamy testu integracji.

Christophe
źródło
5

To bardzo zależy od tego, co uważasz za jednostkę. Jeśli Cjest to tak proste, że testowanie go osobno nie ma sensu, oznacza to, że jest to test jednostkowy.

Znacznie ważniejsze jest, aby pakiet testów jednostkowych dla konkretnej jednostki miał prawie 100% pokrycia linii i przetestował wszystkie praktycznie oczekiwane ścieżki kodu.

9000
źródło
1

Tak, nadal nazywamy to testem jednostkowym, jeśli funkcje wywołują inne funkcje.

Testy jednostkowe powinny testować publiczne zachowanie klasy, a nie prywatne implementacje. Jak sugerują testy Google dotyczące artykułu toaletowego .

Jeśli będziesz przestrzegać zasad Clean Code, twoje funkcje nie powinny być dłuższe niż 4 linie kodu. To uniemożliwia nie testowanie innej funkcji prywatnej za pomocą testów jednostkowych.

Dlaczego nie powinieneś osobno testować większości funkcji prywatnych? Ponieważ refaktoryzacja zmusiłaby Cię do aktualizowania wszystkich testów jednostkowych implementacji. Stanie się to frustrujące, gdy masz ich dużo, podczas gdy zachowanie publiczne nie powinno się zmieniać podczas refaktoryzacji, a zatem test nie powinien wymagać żadnej aktualizacji. Powinieneś być w stanie przetestować prywatne z ich rodzicem publicznym. Czasami warto przetestować skomplikowanych szeregowych, ale zastanawiasz się, czy powinni być osobną klasą?

Test integracji :

Teraz, jeśli funkcja należy do innej klasy, jest inna. Następnie nazwalibyśmy to testowaniem komponentów lub testami integracji. Integrujesz wiele klas i przeprowadzasz z nimi test. Funkcja B zależałaby od funkcji C. Aby móc przetestować jednostkę B, można użyć zastrzyku zależności w celu wyodrębnienia testowanej funkcji, teraz będzie to znowu test jednostkowy.

Niels van Reijmersdal
źródło