За останні кілька тижнів я роздумував і досліджував, як заповнити прогалину в нашій методиці тестування. Спрощено кажучи, одиничні тести занадто малі, а традиційні інтеграційні тести - занадто великі.
Частий сценарій з'являється, коли A
і B
обидва використовують компонент C
. Однак A
і B
мають дещо інші вимоги до, і висловлюють дещо різні припущення щодо C
. Якщо я розробник, A
як і де я перевіряю свої припущення C
?
Очевидно, що тестування в одиницях A
з глузливими припущеннями C
є чудовим для тестування поодиноко A
, але воно не перевіряє самі припущення.
Ще одна можливість - додати модульні тести для C
. Однак це не ідеально, тому що, поки він A
знаходиться в стадії розробки, зміна тестів C
з розвиваються припущеннями A
буде надмірно незграбною. Дійсно A
, розробник може навіть не мати належного доступу до одиничних тестів C
(наприклад, зовнішньої бібліотеки).
Для обрамлення цього на конкретнішому прикладі: Припустимо, що це вузольна програма. A
, і B
залежать від того, C
щоб прочитати файл (серед іншого) та зберегти вміст файлу в переданому об’єкті C
. Спочатку всі файли, які C
обробляють, є невеликими, і їх можна читати синхронно без істотного блокування. Однак розробник B
розуміє, що його файли стають величезними, і йому потрібно перейти C
на читання асинхронізації. Це призводить до помилки синхронної синхронізації A
, яка, як і раніше, передбачає C
читання файлів синхронно.
Це тип помилки, який, як відомо, важко відстежити від повних інтеграційних тестів і може взагалі не потрапити в інтеграційні тести. Це також не зачеплене A
s-тестовими одиницями, оскільки A
припущення s є глузуючими. Однак це може бути легко спіймане "міні" інтеграційним тестом, який здійснює просто A
та C
.
Я знайшов лише кілька посилань на цей тип тестування. Інтеграція в малому , компонентному інтеграційному тестуванні , одиничному інтеграційному тестуванні. Це також дещо стосується напряму тестування BDD, а не формального тестування TDD-одиниць.
Як заповнити цей пробіл для тестування? Конкретно - куди я ставлю такі тести? Як я знущаюся над введеннями A
та C
"міні" інтеграційними тестами? І скільки зусиль потрібно докласти для розмежування проблем тестування між цими тестами та одиничними тестами? Або є кращий спосіб заповнити тестовий пробіл?