За останні кілька тижнів я роздумував і досліджував, як заповнити прогалину в нашій методиці тестування. Спрощено кажучи, одиничні тести занадто малі, а традиційні інтеграційні тести - занадто великі.
Частий сценарій з'являється, коли 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читання файлів синхронно.
Це тип помилки, який, як відомо, важко відстежити від повних інтеграційних тестів і може взагалі не потрапити в інтеграційні тести. Це також не зачеплене As-тестовими одиницями, оскільки Aприпущення s є глузуючими. Однак це може бути легко спіймане "міні" інтеграційним тестом, який здійснює просто Aта C.
Я знайшов лише кілька посилань на цей тип тестування. Інтеграція в малому , компонентному інтеграційному тестуванні , одиничному інтеграційному тестуванні. Це також дещо стосується напряму тестування BDD, а не формального тестування TDD-одиниць.
Як заповнити цей пробіл для тестування? Конкретно - куди я ставлю такі тести? Як я знущаюся над введеннями Aта C"міні" інтеграційними тестами? І скільки зусиль потрібно докласти для розмежування проблем тестування між цими тестами та одиничними тестами? Або є кращий спосіб заповнити тестовий пробіл?