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 setUp
metody 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 assertPersonEqual
metody, 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!