Staram się popierać twoich kolegów, ale tylko do pewnego stopnia.
Problem z testami jednostkowymi polega na tym, że są one często i bezmyślnie pisane na trywialnych przypadkach, w których pobieżne badanie kodu ujawnia, że zadziała ono bez względu na wszystko. Na przykład:
def add(x, y)
x + y
end
Wraz z tuzinem testów, aby upewnić się, że dodatek rzeczywiście będzie działał dla dowolnie wybranych przypadków użycia. Duh ...
Ogólna zasada testowania jednostkowego jest taka: jeśli twój kod nie zawiera błędów, to dlatego, że nie przetestowałeś wystarczająco dużo. Teraz, kiedy napisać odpowiednie testy jednostkowe. Odpowiedzi:
- Kiedy testujesz
- Kiedy debugujesz
- Gdy rozwijasz naprawdę trudne rzeczy
Przejrzyjmy każdy z nich, przypuśćmy, że tworzysz jakąś aplikację internetową.
Piszesz kod do nowej funkcjonalności, która powinna już działać całkiem dobrze. Następnie sięgasz po przeglądarkę i sprawdzasz, czy działa, testując ją bardziej intensywnie, prawda? Bzzzt! ... Błędna odpowiedź. Piszesz test jednostkowy. Jeśli nie zrobisz tego teraz, prawdopodobnie nigdy tego nie zrobisz. Jest to jedno z miejsc, w których testy jednostkowe działają bardzo dobrze: testowanie funkcjonalności na wysokim poziomie.
Następnie odkrywasz błąd (kto nigdy go nie omija?). To prowadzi nas do punktu drugiego. Zanurz się w kodzie i zacznij postępować zgodnie z instrukcjami. W tym czasie napisz testy jednostkowe w kluczowych punktach przerwania, w których kluczowe są spójne i poprawne dane.
Ostatni punkt jest odwrotny. Projektujesz kosmatą funkcjonalność, która wymaga mnóstwa metaprogramowania. Szybko tworzy drzewo decyzyjne z tysiącami potencjalnych scenariuszy i musisz upewnić się, że każdy z nich działa. Pisząc takie rzeczy, prosta zmiana tutaj lub tam może mieć niewyobrażalne konsekwencje w dalszej części łańcucha pokarmowego. Załóżmy, że projektujesz implementację MPTT przy użyciu wyzwalaczy SQL - tak, aby mogła ona współpracować z instrukcjami wieloliniowymi.
W tego rodzaju kolczastym środowisku zazwyczaj chcesz zautomatyzować swoje testy. Więc piszesz skrypty do automatyzacji generowania danych testowych i uruchamiasz ładunek testów jednostkowych na tych danych testowych. Jedną z kluczowych rzeczy, aby nie zgubić się przy tym, jest to, że musisz także napisać testy jednostkowe dla generatora testów jednostkowych.
Konkluzja: testy jednostkowe, zdecydowanie tak. Ale oszczędzaj sobie podstawowych funkcji - dopóki nie będziesz ich potrzebować do debugowania lub upewnienia się, że niektóre włochate funkcje działają poprawnie (w tym, w tym drugim przypadku, same testy).