Zduplikowany kod to zapach w kodzie testów jednostkowych, tak samo jak w innym kodzie. Jeśli masz zduplikowany kod w testach, trudniej jest zrefaktoryzować kod implementacji, ponieważ masz nieproporcjonalną liczbę testów do zaktualizowania. Testy powinny pomóc ci w pewnej refaktoryzacji, a nie być dużym obciążeniem, które utrudnia pracę nad testowanym kodem.
Jeśli powielanie jest w ustawieniach urządzenia, rozważ większe wykorzystanie tej setUpmetody lub zapewnienie większej (lub bardziej elastycznej) metody tworzenia .
Jeśli powielenie występuje w kodzie manipulującym SUT, zadaj sobie pytanie, dlaczego wiele tak zwanych testów „jednostkowych” wykonuje dokładnie tę samą funkcjonalność.
Jeśli duplikacja znajduje się w potwierdzeniach, być może potrzebujesz niektórych potwierdzeń niestandardowych . Na przykład, jeśli wiele testów ma ciąg stwierdzeń, takich jak:
assertEqual('Joe', person.getFirstName())
assertEqual('Bloggs', person.getLastName())
assertEqual(23, person.getAge())
W takim razie może potrzebujesz jednej assertPersonEqualmetody, aby móc pisać assertPersonEqual(Person('Joe', 'Bloggs', 23), person). (A może po prostu musisz przeciążyć operator równości Person).
Jak wspomniałeś, ważne jest, aby kod testowy był czytelny. W szczególności ważne jest, aby cel testu był jasny. Uważam, że jeśli wiele testów wygląda w większości tak samo (np. Trzy czwarte wierszy jest takich samych lub praktycznie takich samych), trudno jest dostrzec i rozpoznać istotne różnice bez uważnego ich przeczytania i porównania. Dlatego uważam, że refaktoryzacja w celu usunięcia duplikatów poprawia czytelność, ponieważ każda linia każdej metody testowej jest bezpośrednio związana z celem testu. Jest to o wiele bardziej pomocne dla czytelnika niż przypadkowa kombinacja wierszy, które są bezpośrednio istotne, i wierszy, które są tylko szablonami.
To powiedziawszy, czasami testy sprawdzają złożone sytuacje, które są podobne, ale wciąż znacząco różne, i trudno jest znaleźć dobry sposób na ograniczenie powielania. Kieruj się zdrowym rozsądkiem: jeśli uważasz, że testy są czytelne i jasno określają ich intencje, i czujesz się komfortowo, jeśli podczas refaktoryzacji kodu wywołanego przez testy musisz zaktualizować więcej niż teoretycznie minimalną liczbę testów, zaakceptuj niedoskonałość i przenieś na coś bardziej produktywnego. Zawsze możesz wrócić i zmodyfikować testy później, gdy nadejdzie inspiracja!