W jakim stopniu jednostka testuje wewnętrzne / prywatne komponenty klasy / modułu / pakietu / etc? Czy w ogóle je testujesz, czy tylko testujesz interfejs do świata zewnętrznego? Przykładem tych wewnętrznych metod są metody prywatne.
Jako przykład wyobraźmy sobie parser rekurencyjnego zejścia , który ma kilka wewnętrznych procedur (funkcji / metod) wywoływanych z jednej centralnej procedury. Jedynym interfejsem do świata zewnętrznego jest centralna procedura, która pobiera ciąg znaków i zwraca przeanalizowane informacje. Pozostałe procedury analizują różne części łańcucha i są wywoływane albo z procedury centralnej, albo z innych procedur.
Oczywiście powinieneś przetestować zewnętrzny interfejs, wywołując go z przykładowymi ciągami znaków i porównując go z ręcznie analizowanym wyjściem. Ale co z innymi procedurami? Czy przetestowałbyś je indywidualnie, aby sprawdzić, czy poprawnie analizują podciągi?
Mogę wymyślić kilka argumentów:
Plusy :
- Więcej testów jest zawsze lepsze, a to może pomóc zwiększyć zasięg kodu
- Niektóre komponenty wewnętrzne mogą być trudne do podania określonych danych wejściowych (na przykład przypadków krawędzi) poprzez podanie danych wejściowych do interfejsu zewnętrznego
- Bardziej przejrzyste testy. Jeśli wewnętrzny komponent ma (naprawiony) błąd, przypadek testowy tego komponentu wyraźnie pokazuje, że błąd dotyczył tego konkretnego komponentu
Wady :
- Refaktoryzacja staje się zbyt bolesna i czasochłonna. Aby zmienić cokolwiek, musisz przepisać testy jednostkowe, nawet jeśli nie dotyczy to użytkowników interfejsu zewnętrznego
- Niektóre języki i ramy testowania na to nie pozwalają
Jakie są twoje opinie