Czy testowanie pojedynczych stwierdzeń narusza DRY?
Nie, ale promuje naruszenie.
To powiedziawszy, dobry obiektowy projekt zwykle wychodzi poza okno do testów jednostkowych - głównie z ważnego powodu. Ważniejsze jest, aby testy jednostkowe były od siebie izolowane, aby można je było przesłuchiwać w izolacji i, w razie potrzeby, naprawić, mając pewność, że nie przełamiesz innych testów. Zasadniczo poprawność i czytelność testu jest ważniejsza niż jego rozmiar lub łatwość konserwacji.
Szczerze mówiąc, nigdy nie byłem fanem jednego twierdzenia na regułę testową z powodów, które opisujesz: prowadzi to do dużej ilości kodu płyty kotłowej, która jest trudna do odczytania, łatwa do złego gotowania i trudna do poprawienia, jeśli refaktoryzujesz (co zmusza Cię do mniejszego refaktoryzacji).
Jeśli funkcja ma zwrócić listę „foo” i „bar” dla danych wejściowych, ale w dowolnej kolejności doskonale jest użyć dwóch twierdzeń, aby sprawdzić, czy oba są w zestawie wyników. Problemem jest sytuacja, gdy pojedynczy test sprawdza dwa sygnały wejściowe lub dwa skutki uboczne i nie wiesz, który z nich spowodował błąd.
Uważam to za wariację zasady pojedynczej odpowiedzialności: powinna istnieć tylko jedna rzecz, która może spowodować niepowodzenie testu, aw idealnym świecie zmiana ta powinna przerwać tylko jeden test.
Ale ostatecznie jest to kompromis. Czy bardziej prawdopodobne jest, że poświęcisz więcej czasu na przechowywanie całego kodu pastey, czy też poświęcisz więcej czasu na poszukiwanie przyczyn źródłowych, gdy testy mogą zostać zerwane przez wiele źródeł. Tak długo, jak piszesz niektóre testy, prawdopodobnie nie ma to większego znaczenia. Pomimo mojej pogardy dla testów z jednym twierdzeniem, mam tendencję do popełniania błędów po stronie większej liczby testów. Twój przebieg może się różnić.