Как мне издеваться над переопределенными, виртуальными / не виртуальными методами базового класса во время модульного тестирования? - PullRequest
4 голосов
/ 22 октября 2011

Как мне макетировать не переопределенные не виртуальные / виртуальные методы в базовом классе и тестировать только методы производного класса? Дело здесь в следующем: У меня есть базовый класс X, у которого есть методы, которые подключаются к внешнему серверу и делают несколько других вещей. У меня есть класс Y, полученный из X. Я реализовал два метода в Y. Я хочу просто протестировать их. Меня беспокоит только эти два метода, и я не хочу, чтобы реализация базового класса вызывалась для подключения к серверу и т. Д. (Я хочу смоделировать эти методы, но я не хочу переопределять эти методы в своем производном классе Y и ничего не делать в них, так как это производственный код). Какие-нибудь мысли / идеи о том, как я могу протестировать эти методы в отдельности?

P.S: Я использую C ++ / GTest для разработки и модульного тестирования.

Ответы [ 2 ]

4 голосов
/ 22 октября 2011

Один из вариантов - создать класс Mock_base и наследуемый от него класс Derived в тестовом каталоге.Теперь смоделируйте любые реализации в реальной Базы, которые вас не интересуют, функциями, которые ничего не делают.Например, Mock_base :: Connect () может возвращать код возврата SUCCESS.Таким образом, вы можете выполнить модульное тестирование Derived: funcs () без изменения исходного кода.

3 голосов
/ 22 октября 2011

Тебе действительно повезло, что тебе трудно это делать!

Функциональность в большинстве случаев не предназначена для повторного использования через наследование, и это является одной из веских причин для этого: ваш базовый класс реализует некоторый интерфейс, который вы хотите макетировать для клиента (т.е. Y ). Возможно, позже эта функциональность может быть реализована другим классом, и Y должен быть в состоянии использовать эту новую, возможно лучшую, реализацию.

Y имеет / использует X, но Y не является X.

Если вашему классу Y необходимо использовать функциональность X (подключиться к серверу и т. Д.), Он должен агрегировать его, а не наследовать от него.

Вы заметите, что схема агрегации позволяет так же насмехаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...