使用一个库,我正在尝试在我的gtests中模拟它。
class MockScanOutcome : public Aws::DynamoDB::Model::ScanOutcome {
public:
MockScanOutcome() : Aws::DynamoDB::Model::ScanOutcome() {};
MOCK_METHOD(bool, IsSuccess, (), (const));
};
其中基具有以下方法定义:
template<typename R, typename E> // Result, Error
class Outcome
{
public:
...
inline bool IsSuccess() const
{
return this->success;
}
}
我在一个测试中运行了以下内容,但是结果是不相等的
Aws::DynamoDB::Model::ScanOutcome *so = dynamic_cast<Aws::DynamoDB::Model::ScanOutcome *>(m_outcome);
EXPECT_CALL(*m_outcome, IsSuccess).WillOnce(Return(true));
EXPECT_EQ(m_outcome, so); //fine
EXPECT_EQ(m_outcome -> IsSuccess(), true); //fine
EXPECT_EQ(so -> IsSuccess(), true); //error
如何重写基类中的const方法?
如果您的M_Outcome
是指向mock
类的指针,则结果是正确的。
EXPECT_CALL(*m_outcome, IsSuccess).WillOnce(Return(true));
需要在mock
实例中进行调用,因此在调用expect_eq(m_output->issucess(),true);
时是可以的。
Aws::DynamoDB::Model::ScanOutcome::IsSuccess
不是虚拟的,因此当从指向ScanOutcome
的指针调用时,它将调用基类函数,该函数不在expect_call
语句中,因此将返回ScanOutcome::success
类成员中的任何值(可能是未初始化的值)