Samo tworzenie projektu testowego i pisanie niektórych metod testowych jest rodzajem TDD, ale z mojego doświadczenia nie ma dużej pomocy, chyba że pracujesz nad biblioteką, w której istnieje znany interfejs API, a wywołania metod odpowiadają bezpośrednio oczekiwaniom użytkownika . Musisz wymyślić odpowiednią listę testów, a dla nietrywialnej aplikacji może to być naprawdę trudne.
Polecam wypróbowanie SpecFlow - nadal definiuje testy ładnie oddzielone od implementacji, a struktura plików funkcji zmusza do myślenia o tym, co faktycznie testujesz.
Kiedy definiujesz funkcję, po prostu piszesz coś takiego
When a user is saved
Then the user should exist
Ponieważ nie ma w tym momencie pliku kodu, nie masz ochoty myśleć o szczegółach implementacji, takich jak metoda wywoływana w celu utworzenia użytkownika lub nawet klasa, w której jest ona implementowana. Możesz użyć znaczników, aby wybrać różne implementacje, więc na tym poziomie nie ma znaczenia, czy „użytkownik jest zapisany” oznacza wywołanie CreateUser lub otwarcie przeglądarki i przesłanie formularza.
Po zdefiniowaniu funkcji wszystkie testy są generowane i zaczynają się powierzać w miarę wdrażania definicji kroków i testowanego rzeczywistego kodu aplikacji.
W przypadku prostej aplikacji możesz po prostu utworzyć pliki funkcji, ale w przypadku bardziej skomplikowanych użyteczne jest wcześniejsze skompletowanie pełniejszej specyfikacji. Używam do tego aplikacji mapowania myśli na iPada, ale możesz użyć dowolnego narzędzia, z którym czujesz się najlepiej.
Zacznij od listy funkcji wysokiego poziomu, takich jak „Rejestracja użytkownika”. Są one zbyt szerokie, aby pisać testy bezpośrednio, więc podziel je na podfunkcje, które można jasno zdefiniować i ogólnie przypisać do określonej akcji użytkownika, takiej jak „Zapisz użytkownika” lub „Wyświetl istniejącego użytkownika”.
Każda z tych podfunkcji będzie wymagała listy scenariuszy, które razem całkowicie określają, czy funkcja działa, np. „Może zapisać poprawnego użytkownika” i „Nie można zapisać użytkownika ze zduplikowaną nazwą użytkownika”.
Podczas budowania tej listy na ogół stanie się jasne, gdzie należy dostosować strukturę - jeśli nie możesz wymyślić żadnych testów scenariuszy dla danej funkcji lub skończy się zbyt wiele w jednej funkcji, to ta funkcja jest prawdopodobnie zdefiniowana na niewłaściwy poziom i należy go podzielić lub zmienić.