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; } ```