Якщо у мене вже є тест на інтеграцію для моєї програми, і вони всі пройшли, я відчуваю, що це спрацює. Тоді які причини писати / додавати одиничні тести? Оскільки мені вже доводиться писати інтеграційні тести, я хотів би написати тестовий блок лише для частин, які не охоплені тестами інтеграції.
Те, що я знаю, користь одиничного тесту над інтеграційним тестом
- Невеликий і, отже, швидкий запуск (але додавання нового модуля для тестування чогось вже перевірено інтеграційним тестом означає, що мій загальний тестовий костюм стає більшим та довшим)
- Виявити помилку простіше, тому що вона перевіряє лише одне (але я можу почати писати тестовий блок, щоб перевірити кожну окрему частину, коли мій тест на інтеграцію не вдався)
- Знайдіть помилку, яка може не потрапити в тест на інтеграцію. наприклад, маскування / компенсація помилок. (але якщо мої тести на інтеграцію проходять, це означає, що моя програма працюватиме навіть прихованою помилкою. Тому знайти / виправити ці помилки насправді не є першочерговим завданням, якщо вони не почнуть порушувати майбутні тести інтеграції або не спричинить проблеми з продуктивністю)
І ми завжди хочемо писати менше коду, але для тестування блоку потрібно набагато більше коду (головним чином, налаштування макетних об'єктів). Різниця між деякими моїми одиничними тестами та тестами інтеграції полягає в тому, що в одиничних тестах я використовую макетний об'єкт, а в тестах інтеграції - реальний об'єкт. У яких багато дублювання, і мені не подобається дублювання коду, навіть у тестах, оскільки це додає накладні витрати для зміни поведінки коду (інструмент рефактора не може весь час працювати).