Дубльований код - це запах в одиничному тестовому коді так само, як і в іншому коді. Якщо ви дублювали код у тестах, це ускладнює переформатування коду реалізації, оскільки у вас є непропорційна кількість тестів для оновлення. Тести повинні допомогти вам рефактору з упевненістю, а не бути великим тягарем, що перешкоджає вашій роботі над тестуваним кодом.
Якщо дублювання встановлено в кріпленні, подумайте про те, як скоріше використовувати setUp
метод або запропонувати більш (або більш гнучкі) Методи створення .
Якщо дублювання міститься в коді, що маніпулює SUT, то запитайте себе, чому декілька так званих «одиничних» тестів виконують саме таку функціональність.
Якщо дублювання у твердженнях, то, можливо, вам знадобляться деякі спеціальні твердження . Наприклад, якщо кілька тестів мають ряд тверджень, таких як:
assertEqual('Joe', person.getFirstName())
assertEqual('Bloggs', person.getLastName())
assertEqual(23, person.getAge())
Тоді, можливо, вам потрібен єдиний assertPersonEqual
метод, щоб ви могли писати assertPersonEqual(Person('Joe', 'Bloggs', 23), person)
. (Або, можливо, вам просто потрібно перевантажити оператора рівності Person
.)
Як ви вже згадували, для тестового коду важливо читати. Зокрема, важливо, щоб наміри тесту були чіткими. Я вважаю, що якщо багато тестів виглядають здебільшого однаково (наприклад, три чверті рядків однакові або практично однакові), важко помітити і визнати суттєві відмінності, не уважно читаючи та порівнюючи їх. Тому я вважаю, що рефакторинг для видалення дублювання сприяє читабельності, оскільки кожен рядок кожного методу тестування безпосередньо стосується мети тесту. Це набагато корисніше для читача, ніж випадкова комбінація ліній, що мають безпосереднє значення, та ліній, які є лише котельними.
Однак, іноді тести проводять складні ситуації, подібні, але все ще значно відрізняються, і важко знайти хороший спосіб зменшити дублювання. Використовуйте здоровий глузд: якщо ви відчуваєте, що тести читаються, і виясняєте їх наміри, і вам зручно, можливо, вам потрібно буде оновити більше, ніж теоретично мінімальна кількість тестів, коли рефакторинг коду, на який посилаються тести, прийміть недосконалість і перемістіть на щось більш продуктивне. Ви завжди можете повернутися та перефактурувати тести пізніше, коли натхнення вразить!