C ++ Mock классы - Как решить эту проблему множественного наследования? - PullRequest
1 голос
/ 29 марта 2019

Я нарисовал диаграмму классов для иллюстрации моего вопроса:

Диаграмма классов

Это простая иерархия классов с некоторыми абстрактными интерфейсными классами.Серые классы показывают несколько макетов, которые я хочу использовать для тестирования.Как обычно, макеты являются производными от классов интерфейса.Это хорошо для 'MockAnimal', но сталкивает меня с некоторыми проблемами в 'MockFish' и MockBird '.

Чтобы не копировать код и упростить мои макеты, было бы замечательно использовать методы mockAnimal, которые имитируютв этих классах (множественное наследование).Тогда мне просто нужно переопределить / смоделировать методы из подчиненных интерфейсов ('IFish' и 'IBird').Это не сработает, потому что я столкнулся с какой-то проблемой с алмазом, я думаю, потому что методы MockAnimal также реализованы в ConcreteAnimal.Поэтому мои 'MockFish' и 'MockBird' получат эти две реализации, но я просто хочу, чтобы они были из 'MockAnimal'.

В качестве обходного пути я изменил свою иерархию классов и просто извлек "MockFish" и "MockBird" изинтерфейсы 'IFish' и 'IBird'.Но это не очень хорошее решение, по моему мнению, потому что макеты будут использовать целые реализации ConcreteAnimal.

Надеюсь, это было понятно.Есть ли хорошее решение для достижения того, чего я хочу?

...