Дублированный код - это такой же запах в коде модульного теста, как и в другом коде. Если у вас есть дублированный код в тестах, это затрудняет рефакторинг кода реализации, потому что вам нужно обновить непропорционально большое количество тестов. Тесты должны помочь вам с уверенностью выполнить рефакторинг, а не стать большим бременем, мешающим вам работать с тестируемым кодом.
Если дублирование уже настроено, рассмотрите возможность более широкого использования метода setUp
или предоставления более (или более гибкого) Способы создания.
Если дублирование находится в коде, управляющем SUT, спросите себя, почему несколько так называемых «модульных» тестов реализуют одни и те же функции.
Если дублирование присутствует в утверждениях, возможно, вам понадобятся некоторые Пользовательские утверждения. Например, если несколько тестов содержат строку утверждений вроде:
assertEqual('Joe', person.getFirstName())
assertEqual('Bloggs', person.getLastName())
assertEqual(23, person.getAge())
Тогда, возможно, вам понадобится единственный assertPersonEqual
метод, чтобы вы могли написать assertPersonEqual(Person('Joe', 'Bloggs', 23), person)
. (Или, возможно, вам просто нужно перегрузить оператор равенства на Person
.)
Как вы упомянули, важно, чтобы тестовый код был читабельным. В частности, важно, чтобы цель теста была ясна. Я считаю, что если многие тесты выглядят в основном одинаково (например, три четверти строк одинаковы или практически одинаковы), трудно заметить и распознать существенные различия, не внимательно прочитав и не сравнив их. Итак, я считаю, что рефакторинг для удаления дублирования помогает читабельности, потому что каждая строка каждого метода тестирования имеет прямое отношение к цели теста. Это гораздо полезнее для читателя, чем случайная комбинация строк, имеющих прямое отношение к делу, и строк, которые являются просто шаблонными.
Тем не менее, иногда тесты исследуют сложные ситуации, которые похожи, но все же значительно отличаются, и трудно найти хороший способ уменьшить дублирование. Используйте здравый смысл: если вы чувствуете, что тесты удобочитаемы и проясняете их намерения, и вам удобно, что, возможно, вам нужно обновить больше, чем теоретически минимальное количество тестов при рефакторинге кода, вызванного тестами, тогда примите несовершенство и переместите перейдем к чему-то более продуктивному. Вы всегда можете вернуться и провести рефакторинг тестов позже, когда придет вдохновение!
person
spiv
schedule
27.09.2008