Testuję metodę, która ma wygenerować zbiór obiektów danych. Chcę sprawdzić, czy właściwości obiektów są ustawione poprawnie. Niektóre właściwości zostaną ustawione na to samo; inne zostaną ustawione na wartość zależną od ich pozycji w kolekcji. Naturalnym sposobem na to wydaje się być pętla. Jednak Roy Osherove zdecydowanie odradza stosowanie logiki w testach jednostkowych ( Art of Unit Testing , 178). On mówi:
Test zawierający logikę zwykle testuje więcej niż jedną rzecz na raz, co nie jest zalecane, ponieważ test jest mniej czytelny i bardziej delikatny. Ale logika testowa dodaje również złożoności, która może zawierać ukryty błąd.
Testy powinny być z reguły serią wywołań metod, bez przepływów kontrolnych, nawet
try-catch
z wywołaniami asertywnymi.
Jednak nie widzę nic złego w moim projekcie (jak inaczej wygenerujesz listę obiektów danych, których niektóre wartości zależą od tego, w jakiej kolejności są? - nie mogą dokładnie wygenerować i przetestować ich osobno). Czy w moim projekcie jest coś niesprzyjającego testom? A może zbyt sztywno poświęca się naukom Osherove? A może jest jakaś tajemna magiczna testowa jednostka, o której nie wiem, która omija ten problem? (Piszę w C # / VS2010 / NUnit, ale jeśli to możliwe, szukam odpowiedzi niezależnych od języka).
in
) jest konieczna, jeśli test brzmi: „Frob został pomyślnie dodany do istniejącej kolekcji”.
toString()
kolekcję i porównuję z tym, co powinno być. Prosty i działa.