Представьте себе систему фильтров (может быть, аудио-фильтры или фильтры текстового потока).
В базовом классе Filter
есть метод do_filter()
, который принимает некоторые входные данные, изменяет их (возможно) и возвращает их в качестве выходных данных.
Существует несколько подклассов, построенных с использованием TDD, и у каждого есть набор тестов, которые проверяют их изолированно.
Наряду с этим создается составной класс несвязанного типа Widget
, который имеет два члена различных типов Filter
(a
и b
), которые имеют дело с совершенно разными входными данными, то есть с определенным входным будет изменен фильтром a
, пропущен через немодифицированный фильтром b
и наоборот. Его process_data()
метод вызывает каждый элемент фильтра do_filter()
.
При разработке составного класса появляются тесты, которые проверяют предположение, что оба фильтра Widget
не обрабатывают одни и те же данные.
Проблема в том, что такого рода тесты выглядят идентично тесту отдельного фильтра. Хотя могут быть и другие тесты, которые проверяют входные данные, которые должны быть изменены обоими фильтрами, многие из тестов могут быть почти скопированы и вставлены из каждого теста фильтра, с небольшими изменениями, необходимыми для их тестирования. с Widget
(например, вызов process_data()
), но входные данные и проверки подтверждения идентичны.
Это дублирование пахнет довольно плохо. Но кажется правильным хотеть проверить взаимодействия компонентов. Какие варианты позволят избежать такого дублирования?