Я схильний сторони з вашими колегами, але лише до певного моменту.
Проблема з одиничними тестами полягає в тому, що вони часто і бездумно пишуться про тривіальні випадки, коли побіжне дослідження коду виявляє, що він буде працювати, незважаючи ні на що. Наприклад:
def add(x, y)
x + y
end
Поряд з десяткам тестів, щоб переконатися, що додаток дійсно працює для довільно обраних випадків використання. Да ...
Загальна передумова тестування одиниць: якщо ваш код не містить помилок, це тому, що ви не пройшли тестування. Тепер, коли писати належні одиничні тести. Відповіді:
- Коли ви тестуєте
- Коли ви налагоджуєте
- Як ви розробляєте справді хитрі речі
Давайте розглянемо кожен з них, припустимо, що ви розробляєте якийсь веб-додаток для веб-сайту.
Ви пишете якийсь код для нового функціоналу, і він повинен працювати досить добре до цього часу. Потім ви зверніться до свого веб-переглядача і переконайтеся, що він працює, проте інтенсивніше тестуючи, чи не так? Bzzzt! ... Неправильна відповідь. Ви пишете одиничний тест. Якщо ви цього не зробите зараз, ви, мабуть, ніколи не зробите. І це одне з місць, коли одиничні тести працюють дуже добре: перевірити функціональність високого рівня.
Потім ви виявите помилку (яка ніколи не пропускає жодної?). Це підводить нас до пункту два. Ви повертаєтесь у код і починаєте виконувати кроки. Як ви робите, пишіть одиничні тести у ключових точках перерви, коли важливість послідовних та правильних даних є визначальною.
Остання точка - навпаки. Ви розробляєте деяку волохату функціональність, яка передбачає безліч метапрограмування. Він швидко породжує дерево рішень з тисячами потенційних сценаріїв, і вам потрібно переконатися, що кожен останній з них працює. Коли пишуть подібні речі, прості погляди на зміну тут чи там можуть мати немислимі наслідки далі за харчовим ланцюгом. Скажімо, ви розробляєте реалізацію MPTT за допомогою тригерів SQL, щоб вона могла працювати з операторами з декількома рядками.
У таких тернистих умовах, як правило, ви хочете дуже автоматизувати свої тести. Таким чином, ви пишете сценарії для автоматизації генерації тестових даних і виконуєте навантаження на човні одиничних тестів за цими тестовими даними. Одним з важливих моментів, щоб не втрачати цей шлях, є те, що вам також потрібно написати одиничні тести для свого генератора тестових одиниць.
Підсумок: одиничні тести, безумовно, так. Але пощадьте себе на основних функціональних можливостях - до тих пір, поки вам це не знадобиться для налагодження або переконайтесь, що деякі волохаті функціональні можливості справно працюють (включаючи, в останньому випадку, самі тести).