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