c++ - gMock upcasting 在 EXPECT_CALL 上失败
问题描述
我遇到了使用 Gmock 进行 UpCasting 的问题
#include "gtest/gtest.h"
#include "gmock/gmock.h"
using namespace testing;
using namespace std;
class MyClass {
public:
MyClass(int xxx) {}
int call(int x) {
};
};
class MockMyClass : public MyClass {
public:
MockMyClass(int xxx) : MyClass(xxx) {};
MOCK_METHOD1(call, int(int));
};
TEST(TestMyClass, worksFine) {
MockMyClass mock(111);
EXPECT_CALL(mock, call(_))
.WillOnce(Return(2000)); // times(1) by default;
mock.call(23);
}
TEST(TestMyClass, doesntWork) {
MockMyClass mock(111);
MyClass &myClassNotMock = mock;
EXPECT_CALL(mock, call(_))
.WillOnce(Return(2000)); // times(1) by default;
myClassNotMock.call(23);
}
我曾尝试使用指针,它看起来是同样的问题。每次我有 Base 对象引用(从模拟向上转换)并且我在其上调用一个函数时,gmock 都不会拾取它。
我会很感激一些帮助
解决方案
好的,所以我设法找出问题所在。因为 MyClass 调用函数不是虚拟的,我必须使用Google Mock CookBook 模拟非虚拟方法中解释的模板技术,或者简单地为 MyClass 引入一个接口并正常模拟它