В моём 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());
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый вечерМне нужно из класса B получать доступ к методам класса A
Я хочу попытаться получить счетчик слов на основе префикса trieНо у меня есть некоторые проблемы