G锁定铸造到基础上会释放模拟行为
GMock casting to base looses mock behaviour
使用一个库,我正试图在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_outcome -> IsSuccess(), true);
时可以。
Aws::DynamoDB::Model::ScanOutcome::IsSuccess
不是虚拟的,所以当从指向ScanOutcome
的指针调用时,它会调用基类函数,该函数不在EXPECT_CALL
语句中,因此将返回ScanOutcome::success
类成员中的任何值(可能是未初始化的值(
相关文章:
- 如何使用Google Mock来模拟gettimeofday()
- 释放错误后堆使用
- G锁定铸造到基础上会释放模拟行为
- 在将变量声明为引用时,堆在释放后使用
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 落砂模拟碰撞检测C++和SFML
- 在gtest.中使用fff.h模拟系统API
- 谷歌模拟和覆盖关键字
- 用C#中的并集模拟C++嵌套结构
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 我写了一个C++程序来模拟Enigma机器.我没有得到输出
- C++双重释放或损坏(out)
- 如何在c++中释放内存
- 使用全局声明的向量时,C++双重释放错误/损坏
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 调用析构函数以释放动态分配的内存