2016-12-27 3 views
1

Я по-прежнему новичок в Google Mock, так что учась, когда я ухожу. Я только что добавил некоторые модульные тесты, и у меня возникла проблема, когда я не могу заставить ON_CALL() правильно заглушить метод, вызванный методом.C++ Google Mock - EXPECT_CALL() - ожидание не работает, когда он не вызван напрямую

Следующий код описывает, что у меня есть;

class simpleClass 
{ 
    public: 
     bool simpleFn1() { return simpleFn2(); } 
     virtual bool simpleFn2() { return FALSE; } 
} 

В моем единичном тесте у меня есть:

class simpleClassMocked : public simpleClass 
{ 
    private: 
     MOCK_METHOD0(simpleFn2, bool()); 
} 

class simpleClassTests : public ::testing::Test 
{ 
} 

TEST_F(simpleClassTests, testSimpleFn2) 
{ 
    shared_ptr<simpleClassMocked> pSimpleClass = shared_ptr<simpleClassMocked>(new simpleClassMocked()); 

    ON_CALL(*pSimpleClass, simpleF2()).WillByDefault(Return(TRUE)); 

    // This works as expected - simpleFn2() gets stubbed 
    pSimpleClass->simpleFn2(); 

    // This doesn't work as expected - when simpleFn1 calls simpleFn2 it's not the stubbed expectation??? 
    pSimpleClass->simpleFn1(); 
} 

Я полагаю, что я должен быть отсутствующий что-то очевидное здесь, может кто-нибудь помочь? Благодаря!

+1

Ваш издеваемый метод должен быть виртуальным. – PiotrNycz

+0

Argh! Вот и все. Спасибо :) Я соответствующим образом обновил этот пример. – user7227230

ответ

0

вам придется Пометьте метод как virtual и добавить соответствующую функцию Мок в simpleClassMocked классе

class simpleClass 
{ 
    public: 
     virtual bool simpleFn1() { return simpleFn2(); } 
     virtual bool simpleFn2() { return FALSE; } 
} 

Кроме того, вы должны поместить Mock методы в public области

class simpleClassMocked : public simpleClass 
{ 
    public: 
     MOCK_METHOD0(simpleFn2, bool()); 
     MOCK_METHOD0(simpleFn1, bool()); 
} 

Сейчас будет работать

Смежные вопросы