Чи слід відокремлювати тести одиниці та інтеграційні тести?


17

Я повинен написати одиничні тести та інтеграційні тести для проекту.

  • Чи слід усі тести помістити в одну папку тестів ?
  • Або повинні бути тести для інтеграції та інтеграції в окремій папці тестів ?
  • Або я навіть повинен вкладати їх в окремі проекти ?

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


1
Якщо ви працюєте в середовищі CI, важливим є те, що вони можуть бути легко ідентифіковані (за атрибутом тощо), оскільки інтеграційні тести не завжди працюють на сервері збірки.
Роббі Ді

Відповіді:


18

Загалом: так, ви повинні розміщувати інтеграційні тести та одиничні тести в різні папки. Часто програмісти не проводять чіткої межі між цими двома видами тестів, а просто пишуть будь-який вид тесту. Але тести на інтеграцію, як правило, повільніше, тому що вони часто включають:

  • Запити до бази даних
  • Мережеві запити
  • Поведінка, залежна від часу
  • Великий обсяг даних

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

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

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

Те, що дозволяє програмісту швидко отримати зворотний зв'язок, це добре. Найбільш повний набір тестів не має значення, чи він не виконується регулярно.

Подальше читання:


Виділяючи папки, чи зберігаєте ви кожну з них у тій же упаковці, що і виробничий код (щоб ви могли протестувати захищені методи)? Наприклад, ви робите модуль maven для одиничних тестів та ще один модуль maven для тестів інтеграції. Так, ви можете відокремити їх і все ще легко перевірити захищені методи.
ihebiheb

@ihebiheb В Java використання видимості пакунків досить насуплено. У деяких випадках може бути корисно використовувати його та отримати доступ до цих API з одиничних тестів. Але загалом це непотрібно. Тести в стилі інтеграції ніколи не потребують доступу до приватних учасників пакету. Поставити чи ні тести в окремий проект Maven залежить від того, як ви хочете їх запустити та розгорнути. Я не в тому, щоб у Java / Maven можна було сказати, що тут є розумним.
Амон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.