Як дізнатися, чи є у мене достатньо покриття тестування блоку, щоб видалити тест інтеграції?


15

Я працюю над спадковою системою (маючи на увазі, це було написано без тестів). Ми спробували протестувати частину системи, написавши тести інтеграції, які перевіряють функціональність зовні.

Це дає мені певну впевненість у рефакторних частинах коду, не переживаючи про його порушення. Але проблема полягає в тому, що ці інтеграційні тести вимагають розгортання (2+ хвилин) та багато хвилин для запуску. Також вони болю підтримувати. Кожен з них охоплює тисячі рядків коду, і коли один з них порушується, це може зайняти години (і), щоб налагодити, чому.

Я писав багато тестових одиниць для цих функціональних змін, які я робив останнім часом, але перед тим, як покластися, я завжди роблю нове розгортання та запускаю всі інтеграційні тести, просто щоб переконатися, що я нічого не пропустив. На даний момент я знаю, що мої модульні тести і деякі тести інтеграції перекриваються те, що вони тестують.

Як я можу знати, коли мої тести на належному рівні адекватно покривають поганий тест на інтеграцію, щоб я міг видалити цей інтеграційний тест?

Відповіді:


18

Найпростіший показник - запитати, "коли в останній раз цей тест на інтеграцію легітимно провалився?" Якщо минулий час (відбулося багато змін) після тесту інтеграції не вдалося, то одиничні тести, ймовірно, роблять досить хорошу роботу. Якщо тест на інтеграцію нещодавно завершився невдачею, то був виявлений дефект, який не виявився одиничними тестами.

Моїм перевагою було б, як правило, підвищити надійність інтеграційних тестів, до того моменту, коли їх можна надійно працювати без нагляду. Якщо вони бігають довго, тоді запускайте їх протягом ночі. Вони все ще цінні, навіть якщо їх проводять лише зрідка. Якщо ці тести занадто крихкі або вимагають вручну втручання, то, можливо, не варто витратити час, щоб їх тримати, і ви можете розглянути можливість відмовитися від тих, які найчастіше досягають успіху.


3
+1 за те, щоб рекомендувати тести бути автоматизованими, оскільки це призводить до очевидного питання "Навіщо вбивати автоматизований тест?"

1
Так, я згоден з цим. Звичайно, навіть це все одно прикусить вас, якщо ви не маєте достатньо хорошого покриття тестових одиниць. Наприклад, в даний час у нас є пакет тестів на інтеграцію, який займає близько 6 годин ... але я не думаю, що тест ніколи не був видалений через фокус моєї компанії на сумісності
Earlz

2
Можливо, я повинен почати нове запитання для цього, але чи пропонуєте ви, що коли тест на інтеграцію правомірно не спрацьовує, я повинен з'ясувати, як написати одиничний тест, який також виходить з ладу і змусить їх пройти обоє?
Даніель Каплан

2
@tieTYT: Так, це абсолютно звучить як гарна ідея. Одиничні випробування хороші; одиничні тести для речей, які, на вашу думку, вже були зламані, ще кращі.
Грег Хьюгілл

7

Тести одиниць - не святий граал тестування, вони лише один інструмент із багатьох, ніж слід використовувати для тестування бази коду. Тому жодна кількість одиничних тестів ніколи не повинна вважатися безпечною для заміни інших тестів. Якщо у вас поганий тест на інтеграцію, вам слід попрацювати, щоб зробити його хорошим тестом на інтеграцію, а не замінити його чимось іншим, тобто заміною заміни вхідних дверей огорожею та периметром.


Якби цей проект починався з нуля, це мало б для мене сенс. Але моїм першим тестом на інтеграцію було "перевірити, чи ти можеш увійти", і, врешті-решт, я зробив чимало одиничних тестів, які "перевіряють, чи ти можеш увійти". Тест на інтеграцію постійно виходить з ладу, якщо ви зміните html. Цей приклад повністю надуманий, але чи це не гарний випадок для видалення інтеграційного тесту?
Даніель Каплан

3
@tieTYT: тестування чогось за допомогою інтерфейсу часто призводить до дуже нестабільного рішення. Тим не менш, тестування користувальницьким інтерфейсом важливо, тому що іноді трапляється те, що ручні тести дають менше зусиль, ніж намагання автоматизувати цей тест і підтримувати його стабільним. Тож, якщо вам здається, що це так, ви можете видалити цей "тест на інтеграцію" зі списку автоматизованого тесту та додати його до свого плану тестування ручних тестів.
Док Браун

@DanielKaplan чи можна було б оновити тест на інтеграцію, щоб бути більш стабільним? Якщо це не вдається через те, що html змінюється іноді, можливо, протестуйте щось на зразок "ім'я користувача з'являється на сторінці після входу", а не щось більш конкретне, наприклад "ім'я користувача з'являється всередині цього діва після входу"
День
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.