За последние несколько недель я размышлял и изучал, как заполнить пробел в нашей методологии тестирования. Упрощенно, юнит-тесты слишком малы, а традиционные интеграционные тесты слишком велики.
Частым сценарий придумывает , где 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модульными тестами As, потому что предположения s являются ложными. Однако это может быть легко поймано "мини" интеграционным тестом, который выполняет только Aи C.
Я нашел только несколько ссылок на этот тип тестирования. Интеграция в малых , тестирование интеграции компонентов , единицы интеграции тестирования. Это также в некоторой степени относится к направлению тестирования BDD, а не к формальному тестированию модулей TDD.
Как мне заполнить этот пробел? Конкретно - куда мне ставить такие тесты? Как смоделировать входы Aи Cдля «мини» интеграционных тестов? И сколько усилий нужно приложить для разделения проблем тестирования между этими тестами и юнит-тестами? Или есть лучший способ заполнить пробел тестирования?