Testowanie jednostkowe odnosi się do tego , co testujesz , a TDD do kiedy testujesz.
Oba są ortogonalne.
Testowanie jednostkowe oznacza, no cóż, testowanie poszczególnych jednostek zachowania. Indywidualna jednostka zachowania jest najmniejszą możliwą jednostką zachowania, którą można indywidualnie przetestować osobno. (Wiem, że te dwie definicje są okrągłe, ale wydaje się, że sprawdzają się całkiem dobrze w praktyce).
Testy jednostkowe możesz pisać przed napisaniem kodu, po napisaniu kodu lub podczas pisania kodu.
TDD oznacza (znowu, dość oczywiste), że twoje testy napędzają twój rozwój (i twój projekt). Możesz to zrobić za pomocą testów jednostkowych, testów funkcjonalnych i testów akceptacyjnych. Zwykle używasz wszystkich trzech.
Najważniejszą częścią TDD jest środkowy D . Pozwolisz, by testy cię poprowadziły . Testy mówią ci, co robić, co robić, kiedy skończysz. Mówią ci, jaki będzie interfejs API, jaki jest projekt. (Jest to ważne: TDD nie polega przede wszystkim na pisaniu testów. Istnieje wiele projektów, które najpierw piszą testy, ale nie ćwiczą TDD. Pisanie testów jako pierwszy jest po prostu warunkiem koniecznym, aby testy mogły napędzać rozwój.)
Testowanie jednostkowe jest elementem rozwoju opartego na testach
Możesz przeprowadzać testy jednostkowe bez programowania opartego na testach. Nie można jednak tworzyć programowania opartego na testach bez użycia testów jednostkowych.
Kiedy wykonujesz tradycyjne testy jednostkowe , piszesz test po napisaniu kodu.
Podejście programistyczne oparte na testach polega na napisaniu testu jednostkowego przed napisaniem kodu.
Najciekawsze zalety TDD (IMHO) w porównaniu do prostych testów jednostkowych:
źródło
TDD i testy jednostkowe są dwoma bardzo szczegółowymi terminami, które często są niewłaściwie używane.
TDD pisze test, który się nie powiedzie, następnie zapisuje minimalną ilość kodu wymaganą do jego uruchomienia, a następnie refaktoryzuje kod, aby był czysty. Odbywa się to w cyklach, fail -> pass -> refactor, dodając nowy test dla każdego znanego wymagania dla kodu. Niedawno TDD stało się jeszcze bardziej szczegółowe na temat pisania testów jednostkowych w tym cyklu, aby odróżnić je od ATDD (podzbiór BDD), który pisze testy akceptacyjne w podobnym cyklu.
Testowanie jednostkowe polega na testowaniu kodu w małych, izolowanych jednostkach. Częstym nieporozumieniem jest myślenie, że jeśli używasz narzędzia do testowania jednostek, takiego jak xUnit lub Rspec, do uruchamiania testów, które piszesz testy jednostkowe. To niekoniecznie jest prawdą. Narzędzi tych można używać do uruchamiania testów powiedzianych przy użyciu środowiska Selenium - w takim przypadku piszesz testy akceptacyjne przy użyciu programu uruchamiającego testy jednostkowe. Testy jednostkowe są bardzo konkretnymi testami, które koncentrują się na małej logice, odizolowanej od wszystkiego ze względu na szybkość (abyś mógł je często uruchamiać i uzyskać szybką informację zwrotną na temat nowych błędów).
źródło
TDD to podejście polegające na pisaniu przypadków testowych przed opracowaniem, jak powiedziałeś, a następnie programista pisze kod, aby przekazać przypadki testowe. Testowanie jednostkowe to termin używany do opisania wąskiego zakresu testów innych niż testy systemowe, testy integracyjne i testy akceptacyjne.
źródło
TDD to filozoficzne podejście do pisania kodu: najpierw napisz testy. Testy, które piszesz, są testami jednostkowymi.
źródło
Sposób, w jaki je rozdzielam, polega na rozważeniu, że TDD mniej polega na testowaniu, a więcej na projektowaniu kodu. Następnie stosuje się testy jednostkowe w celu ustalenia oczekiwań dla kodu końcowego. Kiedy kod końcowy jest zapisywany i przechodzi testy (specyfikacje), masz kod, który został zaprojektowany przy użyciu testów.
źródło
Wszystkie doskonałe odpowiedzi. Dodałbym tylko, że testy jednostkowe zwykle traktują „jednostkę” jako niewielki komponent, podczas gdy TDD można rozszerzyć o testy integracji i akceptacji.
(Niektóre warianty TDD uznają „jednostkę” za najmniejszy krok po kroku w kierunku pożądanej funkcjonalności ...)
źródło