Коли відбуваються значні зміни коду (новий набір POJO, основні рефакторинг додатків тощо), одиничні тести, як правило, коментуються, а не переробляються.
Я завжди намагаюся тримати рефакторинг і зміну функціональності окремо. Коли мені потрібно зробити те і інше, я зазвичай спочатку здійснюю рефакторинг.
Якщо код рефакторингу без зміни функціональності, існуючі тести блоку повинні допомогти гарантувати, що рефакторинг не випадково порушить функціональність. Тому для такого зобов'язання я б вважав відключення або вилучення тестування блоку головним попереджувальним знаком. Будь-якому розробнику, який це робить, слід сказати цього не робити під час перегляду коду.
Можливо, що зміни, які не змінюють функціональність, все-таки спричиняють збій тестів одиниць через хибні тести одиниць. Якщо ви розумієте код, який ви змінюєте, то причина таких відмов тесту, як правило, відразу очевидна і легко виправити.
Наприклад, якщо функція бере три аргументи, тест одиниці, що охоплює взаємодію між першими двома аргументами для функції, можливо, не потурбувався б про надання дійсного значення для третього аргументу. Цей недолік в одиничному тесті може бути виявлений за допомогою рефакторингу тестованого коду, але його легко виправити, якщо ви розумієте, що повинен робити код і що тестує одиничне тестування.
При зміні існуючої функціональності зазвичай потрібно також змінити деякі одиничні тести. У цьому випадку одиничні тести допомагають гарантувати, що ваш код змінює функціональність за призначенням і не має небажаних побічних ефектів.
Виправляючи помилки або додаючи нові функціональні можливості, зазвичай потрібно додати більше одиничних тестів. Для тих, хто може корисно спершу здійснити одиничні тести та пізніше встановити виправлення помилок чи нові функції. Це полегшує перевірку того, що тести нового блоку не проходили зі старішим кодом, а проходили з новим кодом. Цей підхід не зовсім не має недоліків, тому існують також аргументи на користь проведення одночасно нових тестів модуля та оновлення коду.
Час краще витратити на тести інтеграції, що охоплюють випадки використання, які роблять тести меншого масштабу менш важливими / зовсім не важливими.
У цьому є деякий елемент правди. Якщо ви зможете охопити нижні шари стеку програмного забезпечення тестами, орієнтованими на більш високі шари стеку програмного забезпечення, ваші тести можуть бути кориснішими при рефакторингу коду.
Я не думаю, що ви знайдете домовленість щодо точного розмежування між тестом одиниці та тестом інтеграції. І я б не хвилювався, якщо у вас є тестовий випадок, який один розробник називає тестовим модулем, а інший - тестом інтеграції, якщо вони можуть погодитися, що це корисний тестовий випадок.