Ошибка компиляции тестового примера GTest EXPECT_CALL

#include "gtest\gtest.h"
using namespace testing;

class MyGTest : public Test
{
public:
    void f(){}
    void g(){
        f();
        f();
    }
};

TEST_F(MyGTest, first)
{
    EXPECT_CALL(*this, f()).Times(2);
    g();
}

VC2013 говорит:

    "MyGTest_first_Test" has no member "gmock_f"

Что это значит? Я ожидаю, что вызов g() вызовет f() 2 раза. Любая синтаксическая ошибка, которую я сделал?


person vik santata    schedule 22.02.2016    source источник


Ответы (1)


Не синтаксическая ошибка, а скорее совершенно неправильный подход. Макрос EXPECT_CALL используется для установки ожиданий вызовов функций от фиктивных объектов. Проблема в том, что вы не передаете фиктивный объект EXPECT_CALL (объект класса, определение которого содержит MOCK_METHODN), вместо этого вы разыменовываете указатель this. При этом вы передаете объект своего тестового класса в EXPECT_CALL. Вот почему в ошибке компилятора упоминается класс MyGTest_first_Test, gmock создает новый класс в фоновом режиме, а его имя представляет собой комбинацию имени класса фикстуры (MyGTest), имени тестового примера (first) и имени базового класса (Test).

person Marko Popovic    schedule 22.02.2016