Мне назначили писать unittest для «злого» дизайна рядом с gmock. С самого начала это сложнее, чем я, но у меня также есть свое решение для этого.
Это проще, чем я, хотя (опять же: D)
1.Insert в заголовок базового класса необходимо любой макет. Или вы можете создать новый и указать его путь.
class Base
{
public:
MOCK_METHOD0(mock_doSmt, void());
void doSmt(void);
}
2.Дль звонки в Базируйте макет метод, просто создать BaseStub.cpp
Этого источник цель для насмешливых только. Так что, вы должны скомпилировать & связь с BaseStub.cpp
вместо Base.cpp
void Base::doSmt(void) { mock_doSmt(); }
3.When тест
EXPECT_CALL(*reinterpret_cast<Base*>(&derivedInstance), mock_doSmt()).Times(1);
mock_doSmt вместо doSmt
Этот способ может решить Singleton слишком , Создайте SingletonStub, как указано выше, и в SetUp() просто singletonInstance = Singleton::getInstance();
Помните: Таким образом, у вас есть 2 источника и 2 заголовка.
Когда сталкиваются с этой дурой, я понял, что должен использовать #include <...>
вместо #include "..."
Причина, когда вы задаете включают Дира, #include <...>
позволит вам больше контроля.
И еще важно, чтобы я хотел бы поделиться является
Не абстрактные так много вашего ООП.Потому что после этого он (или ваш коллега) повлечет за собой большие неприятности. Не наследуйте более 2 уровней, всего 1 интерфейс и 1 наследуйте.