Utrzymywanie dużych fałszywych danych jest trudne i nierealne. Jeszcze trudniej jest, gdy struktura bazy danych ulega zmianom.
Fałszywe.
Testy jednostkowe nie wymagają „dużych” próbnych danych. Wymaga wystarczającej ilości próbnych danych do przetestowania scenariuszy i nic więcej.
Ponadto prawdziwie leniwi programiści proszą ekspertów tematycznych o tworzenie prostych arkuszy kalkulacyjnych różnych przypadków testowych. Tylko prosty arkusz kalkulacyjny.
Następnie leniwy programista pisze prosty skrypt do przekształcania wierszy arkusza kalkulacyjnego w jednostkowe przypadki testowe. To naprawdę bardzo proste.
Gdy produkt ewoluuje, arkusze kalkulacyjne przypadków testowych są aktualizowane i generowane są nowe testy jednostkowe. Rób to cały czas. To naprawdę działa.
Nawet w przypadku MVVM i możliwości testowania GUI odtworzenie scenariusza GUI wymaga dużo kodu.
Co? "Rozmnażać się"?
Celem TDD jest projektowanie rzeczy pod kątem testowalności (Test Drive Development). Jeśli GUI jest tak złożony, należy go przeprojektować, aby był prostszy i bardziej testowalny. Prostsze oznacza również szybsze, łatwiejsze w utrzymaniu i bardziej elastyczne. Ale w większości prostsze będą oznaczały więcej do przetestowania.
Mam doświadczenie, że TDD działa dobrze, jeśli ograniczysz go do prostej logiki biznesowej. Trudno jest jednak przetestować złożoną logikę biznesową, ponieważ liczba kombinacji testu (przestrzeni testowej) jest bardzo duża.
To może być prawda.
Jednak bardzo pomocne jest poproszenie ekspertów tematu o dostarczenie podstawowych przypadków testowych w prostej formie (np. Arkusza kalkulacyjnego).
Arkusze kalkulacyjne mogą stać się dość duże. Ale to w porządku, ponieważ użyłem prostego skryptu Python, aby zamienić arkusze kalkulacyjne w przypadki testowe.
I. Musiałem ręcznie napisać kilka przypadków testowych, ponieważ arkusze kalkulacyjne były niekompletne.
Jednak. Gdy użytkownicy zgłosili „błędy”, po prostu zapytałem, który przypadek testowy w arkuszu kalkulacyjnym jest nieprawidłowy.
W tym momencie eksperci merytoryczni albo poprawią arkusz kalkulacyjny, albo dodadzą przykłady wyjaśniające, co miało się wydarzyć. Zgłoszenia błędów mogą - w wielu przypadkach - być jasno zdefiniowane jako problem przypadku testowego. Z mojego doświadczenia wynika, że zdefiniowanie błędu jako zepsutego przypadku testowego znacznie ułatwia dyskusję.
Zamiast słuchać ekspertów próbujących wyjaśnić bardzo złożony proces biznesowy, eksperci muszą przedstawić konkretne przykłady tego procesu.
TDD wymaga, aby wymagania były w 100% poprawne. W takich przypadkach można oczekiwać, że podczas tworzenia testów zostaną wychwycone sprzeczne wymagania. Problem polega jednak na tym, że nie jest tak w złożonym scenariuszu.
Nieużywanie TDD absolutnie wymaga, aby wymagania były w 100% poprawne. Niektórzy twierdzą, że TDD może tolerować niekompletne i zmieniające się wymagania, przy czym podejście inne niż TDD nie może działać z niekompletnymi wymaganiami.
Jeśli nie użyjesz TDD, sprzeczność zostanie wykryta późno w fazie wdrażania.
Jeśli używasz TDD, sprzeczność jest wykrywana wcześniej, gdy kod przechodzi niektóre testy, a inne nie. Rzeczywiście, TDD daje dowód na sprzeczność na wcześniejszym etapie procesu, na długo przed implementacją (oraz argumenty podczas testowania akceptacji użytkownika).
Masz kod, który przechodzi niektóre testy, a inne nie. Patrzysz tylko na te testy i znajdujesz sprzeczność. Działa to naprawdę bardzo dobrze w praktyce, ponieważ teraz użytkownicy muszą kłócić się o sprzeczność i przedstawiać spójne, konkretne przykłady pożądanego zachowania.