Test Driven Development – w skrócie TDD, jest to metoda wytwarzania oprogramowania polegająca na uprzednim pisaniu testu jednostkowego, a dopiero później implementacji danej funkcjonalności. W podejściu tym rozróżniamy trzy kroki w każdym cyklu: red – najpierw piszemy nieprzechodzący test jednostkowy, drugi krok – green, w którym implementujemy funkcjonalności tak, aby test przechodził, trzeci krok – refactor, czyli refaktoryzacja napisanego kodu i sprawdzenie czy przechodzą nam wszystkie napisane testy, jeżeli tak, przechodzimy wtedy do pierwszego kroku w kolejnym cyklu.

Testy jednostkowe tzw. unit testy jest to rodzaj testów, które testują tylko logikę biznesową, bez łączenia się z zewnętrznymi komponentami. Oprócz testów jednostkowych rozróżniamy także testy integracyjne, gdzie testujemy jak zachowa się program przy współpracy z faktyczną bazą danych czy zewnętrznym serwisem. Trzecim rodzajem testów są testy funkcjonalne, w których testujemy system z poziomu użytkownika i na poziomie sprawdzania całych funkcjonalności biznesowych. 

Wracając do testów jednostkowych, które są najliczniejsze i najmniej pamięciożerne wśród wszystkich testów w systemie, powinny one skupiać się na jak najmniejszej jednostce systemu, niewielkim fragmencie kodu i powinny sprawdzać działanie metod składowych danej klasy w izolacji. W przypadku klas, które odpowiadają za komunikację z zewnętrznymi serwisami, zastępujemy je ich o wiele prostszymi wersjami – jest to tzw. mockowanie. Stworzenie mocka umożliwia framework używany w testach jednostkowych –  mockito. Mock – to obiekt, który symuluje zachowanie prawdziwego obiektu i prawdziwego kodu, zapewnia znacznie większą elastyczność i daje więcej funkcjonalności w porównaniu do stubów. Stub z kolei jest to przykładowa implementacja jakiegoś kodu, którego zachowanie chcemy przetestować. Rozróżniamy także obiekty typu spy – są to obiekty hybrydowe, będące częściowo mockami, a częściowo normalnymi obiektami, z tego względu nazywane są czasem partial-mockami. Dzięki nim możemy mieszać działanie metod mockowych oraz normalnych, jest to tzw. wrapper – a więc obiekt opakowujący obiekt danej klasy, którego działanie możemy śledzić oraz weryfikować.