C++ C++;在同一类的另一个方法中调用GoogleMock方法
我在这里看到了这个问题: 并试图实现答案,但对我来说不起作用 我修改了链接问题的实现,删除了mockC++ C++;在同一类的另一个方法中调用GoogleMock方法,c++,unit-testing,C++,Unit Testing,我在这里看到了这个问题: 并试图实现答案,但对我来说不起作用 我修改了链接问题的实现,删除了mockReturnInputPlus1(),这是公认答案的建议: using ::testing::Invoke; using ::testing::_; using ::testing::Return; class MyClass { public: MyClass() : x(1) {} virtual ~MyClass() {} int ReturnInput(i
ReturnInputPlus1()
,这是公认答案的建议:
using ::testing::Invoke;
using ::testing::_;
using ::testing::Return;
class MyClass
{
public:
MyClass() : x(1) {}
virtual ~MyClass() {}
int ReturnInput(int x) { return x; }
int ReturnInputPlus1(int x) { return ReturnInput(x) + 1; }
private:
int x;
};
class MockMyClass : public MyClass
{
public:
MockMyClass()
{
ON_CALL(*this, ReturnInput(_)).WillByDefault(Invoke(&real, &MyClass::ReturnInput));
}
virtual ~MockMyClass() {}
MOCK_METHOD1(ReturnInput, int(int y));
private:
MyClass real;
};
TEST(MyClassTest, mockUseClassMethod)
{
MockMyClass mock;
EXPECT_CALL(mock, ReturnInput(_))
.WillOnce(Return(2));
EXPECT_EQ(3, mock.ReturnInputPlus1(1));
}
这仍然返回相同的失败
/projects/tests/cpp/google-test/test.cpp:46: Failure
Expected: 3
To be equal to: mock.ReturnInputPlus1(1)
Which is: 2
/projects/tests/cpp/google-test/test.cpp:41: Failure
Actual function call count doesn't match EXPECT_CALL(mock, ReturnInput(_))...
Expected: to be called once
Actual: never called - unsatisfied and active
如果不在MyClass中创建方法,我看不到实现对模拟行为的内部调用重定向的方法 下面是一个工作示例:
- 删除了
成员,mock仍在继承MyClassreal
- 我想“诀窍”是要知道可以像这样调用父类行为:
(),并理解这将导致使用MockMyClass::ReturnInputmock.MyClass::ReturnInputPlus1(1)
- 我不太确定MyClass::x想要实现什么,因为它将被函数参数隐藏
class MyClass
{
public:
MyClass()
: m_x(1)
{
}
virtual ~MyClass() {}
virtual int ReturnInput(int x) { return x; }
virtual int ReturnInputPlus1(int x) { return ReturnInput(x) + 1; }
private:
int m_x;
};
class MockMyClass : public MyClass
{
public:
MockMyClass()
: MyClass()
{
ON_CALL(*this, ReturnInput(_)).WillByDefault(Invoke(this, &MyClass::ReturnInput));
}
virtual ~MockMyClass() {}
MOCK_METHOD1(ReturnInput, int(int y));
MOCK_METHOD1(ReturnInputPlus1, int(int y));
};
TEST(MyClassTest, mockUseClassMethod)
{
MockMyClass mock;
EXPECT_CALL(mock, ReturnInput(_)).WillOnce(Return(2));
EXPECT_EQ(3, mock.MyClass::ReturnInputPlus1(1));
}