Actual function call count doesn't match EXPECT_CALL(*mock, display())

c++, googlemock, googletest

Solution

Try something more like:

#include <iostream>
#include <gtest/gtest.h>
#include <gmock/gmock.h>

class GTEST_static_class {
  public:
    virtual void display() { std::cout << "inside the GTEST_static_class:: display\n"; }
    virtual ~GTEST_static_class() {}
};

class MockGTEST_static_class : public GTEST_static_class {
  public:
    MOCK_METHOD0(display, void());
};

class GTest_static_example : public ::testing::Test {
  public:
    void call_display(GTEST_static_class *instance) {
      instance->display();
      std::cout << "display called from GTest_static_example\n";
    }
};

int main(int argc, char * argv[]) {
  ::testing::InitGoogleTest(&argc,argv);
  return RUN_ALL_TESTS();
}

TEST_F(GTest_static_example, case1) {
  MockGTEST_static_class mock;
  EXPECT_CALL(mock, display()).WillOnce(::testing::Return());
  call_display(&mock);
}

You need to pass the actual instance of the class upon which you make the expectation. Also, you need to make `void display();` virtual if you want the mock to be able to override it. Forgetting to add `virtual` unfortunately doesn't generate any compiler warnings or errors - it' just something you have to watch out for. You should also make `GTEST_static_class`'s destructor virtual to avoid slicing.

Problem

I'm calling `EXPECT_CALL` on a mocked function `display()`, but it is returning the run time error `Actual function call count doesn't match EXPECT_CALL(*mock, display())...` output ``` ./GTest_static_example.tst [==========] Running 1 test from 1 test case. [----------] Global test environment set-up. [----------] 1 test from GTest_static_example [ RUN ] GTest_static_example.case1 inside the GTEST_static_class:: display display called from GTest_static_example package/web/webscr/GTest_static_example.cpp:70: Failure Actual function call count doesn't match EXPECT_CALL(*mock, display())... Expected: to be called once Actual: never called - unsatisfied and active [ FAILED ] GTest_static_example.case1 (0 ms) [----------] 1 test from GTest_static_example (0 ms total) [----------] Global test environment tear-down [==========] 1 test from 1 test case ran. (0 ms total) [ PASSED ] 0 tests. [ FAILED ] 1 test, listed below: [ FAILED ] GTest_static_example.case1 1 FAILED TEST ``` GTEST_static_class.h ``` #include<iostream> using namespace std; class GTEST_static_class { public: GTEST_static_class() {} void display() { cout<< "inside the GTEST_static_class:: display " <<endl; } }; ``` GTest_static_example.cpp ``` #include <gtest/gtest.h> #include <gmock/gmock.h> #include <iostream> #include "GTEST_static_class.h" using namespace std; using ::testing::Return; class GTest_static_example : public::testing::Test { public: virtual void SetUp(); virtual void TearDown(); void call_display() { GTEST_static_class *_class = new GTEST_static_class(); _class->display(); cout<<"display called from GTest_static_example"<<endl; } }; class MockGTEST_static_class : public GTEST_static_class { public: MockGTEST_static_class():GTEST_static_class() {} MOCK_METHOD0(display, void()); }; int main(int argc, char* argv[]) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } void GTest_static_example::SetUp() {} void GTest_static_example::TearDown() {} TEST_F(GTest_static_example, case1) { MockGTEST_static_class *mock = new MockGTEST_static_class(); EXPECT_CALL(*mock,display()).WillOnce(Return()); call_display(); delete mock; } ```

Original source