c++11 - Gmock - 严格的模拟和独特的 ptr - 如何将模拟传递给 impl
问题描述
这是一个示例代码:
class Interface
{
public:
virtual ~Interface(){}
virtual void Start() = 0;
};
class MockInterface: public Interface
{
public:
MOCK_METHOD0(Start, void());
};
class T
{
public:
T(std::unique_ptr<Interface>& impl): impl_(impl){}
private:
std::unique_ptr<Interface>& impl_;
};
我想创建一个严格的模拟,但我不确定如何将它构造为唯一的 ptr 然后传递给 T 构造函数。
解决方案
#include <gmock/gmock.h>
#include <gtest/gtest.h>
class Interface
{
public:
virtual ~Interface(){};
virtual void Start() = 0;
};
class MockInterface : public Interface
{
public:
MOCK_METHOD0( Start, void() );
};
class T
{
public:
explicit T( std::unique_ptr< Interface > impl ) :
impl_( std::move( impl ) ) {}
void Start()
{
impl_->Start();
}
private:
std::unique_ptr< Interface > impl_;
};
TEST( Interface_test, Interface )
{
auto mock{ std::make_unique< MockInterface >() };
EXPECT_CALL( *mock, Start() );
auto t{ T{ std::move( mock ) } };
t.Start();
}
发布完整的答案以及使用示例和 T 类的更新。建议移动 unique_ptr 而不是参考。
推荐阅读
- tensorflow2.0 - 如何将 StatisticsGen 与 RaggedTensor 一起使用?
- react-hooks - 在 useState 与 useEffect 中挂钩初始值
- github - 使用 Github 设置双重身份验证,不再让我输入密码
- javascript - 检查元素的值并采取行动
- java - Intelij Maven:错误:不再支持源选项 6。使用 7 或更高版本。还有解决方案吗?
- java - 减少 DTO 建模类中的样板代码(getter 和 setter)
- java - Gradlew 不工作(失败:生成异常。)
- c++ - 使用 QsciLexerCustom 突出显示 QScintilla 语法 - UTF-8 问题
- javascript - 从对象数组中的元素创建一个字符串
- r - “需要有限的 'ylim' 值”错误消息