Да, это возможно.Хитрость заключается в том, чтобы позволить вашей иерархии тестов классов модулей следовать иерархии классов вашего кода.
Предположим, у вас есть интерфейс Itf
с реализующими классами C1
и C2
.
Сначала вы создаете тестовый класс для Itf
(ItfTest
).Чтобы фактически выполнить тест, вам нужно создать фиктивную реализацию вашего Itf
интерфейса.
Все тесты в этом ItfTest
должны проходить на любой реализации Itf
(!).Если нет, ваша реализация не соответствует принципу подстановки Лискова ("L" в принципах Мартина SOLID проектирования ОО)
Таким образом, для создания тестакейс для C1
, ваш C1Test
класс может расширяться ItfTest
.Ваше расширение должно заменить создание фиктивного объекта созданием объекта C1
(добавление или использование фабричного метода GoF ).Таким образом, все ItfTest
случаи применяются к экземплярам типа C1
.Кроме того, ваш класс C1Test
может содержать дополнительные тестовые наборы, специфичные для C1
.
Аналогично для C2
.И вы можете повторить этот трюк для более глубоких вложенных классов и интерфейсов.
Ссылки: шаблон Binder's Polymorphic Server и McGregor PACT - параллельная архитектура для тестирования компонентов