В моём TestMock классе у меня есть два метода:
MOCK_CONST_METHOD0(function1, const bool&());MOCK_METHOD0(function1, bool&());В тестовой фикстуре я хочу вызвать второй мок, но тест вызывает первый мок.
EXPECT_CALL(*testMock, function1());
Что я должен сделать, чтобы в EXPECT_CALL вызывался второй мок?
class TestA
{
public:
virtual ~ TestA() {}
bool foo1()
{
return function1();
}
virtual bool& function1() = 0;
virtual const bool& function1() const = 0;
};
class TestMock : public TestA
{
public:
MOCK_CONST_METHOD0(function1, const bool&());
MOCK_METHOD0(function1, bool&());
virtual ~ TestMock () {}
};
class TestConfiguration : public :: testing :: Test
{
void SetUp()
{
}
void TearDown()
{
delete testMock;
}
public:
TestMock *testMock;
};
TEST_F(TestConfiguration, testFooTEST)
{
testMock = new TestMock();
EXPECT_CALL(*testMock, function1());
testMock->foo1();
}
EXPECT_CALL ничего не вызывает, это макрос служит для регистрации ожиданий вызова, т.е. написав такую строчку EXPECT_CALL(*testMock, function1());, Вы говорите: «до конца этого теста на объекте *testMock должен произойти вызов function1». Если условие не соблюдено, то получите ошибку.
GMock различает перегруженные методы и для Вашего случая тоже имеет решение. По умолчанию, в такой перегрузке GMock будет ожидать вызов неконстантного метода, чтобы указать ему, что нужно ждать вызов константного метода нужно написать так: EXPECT_CALL(Const(*testMock), function1());
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости