c++ - 为 GTest 模拟自动生成代理对象
问题描述
给定以下应用程序:
struct IFooImpl
{
virtual ~IFooImpl( ) = default;
virtual void f( ) = 0;
};
class Foo
{
public:
Foo( std::unique_ptr< IFooImpl > impl )
: m_impl( std::move( impl ) )
{
}
private:
std::unique_ptr< IFooImpl > m_impl;
};
需要用 mocks 为 Foo 实现一个测试(GTest)。IFooImpl 不能简单地在 Foo 和 test 之间共享,因为使用了 std::unique_ptr。所以我想实现一个代理,其中包含共享实现:
class FooProxy : public IFooImpl
{
public:
FooProxy( std::shared_ptr< IFooImpl > impl )
: m_impl( impl )
{
}
void
f( ) override
{
m_impl->f( );
}
private:
std::shared_ptr< IFooImpl > m_impl;
};
...
auto mock = std::make_shared<FooMock>();
Foo foo(std::make_unique<FooProxy>(mock));
我想避免样板代码。是否可以自动生成这样的 FooProxy 或者至少最小化复制粘贴的次数?GTest 中有帮助程序吗?
解决方案
推荐阅读
- c++ - 重新定义 printf()、sprintf() 等 arm-none-eabi 工具链
- hadoop - Gobblin MapReduce 从 protobuf 转换为 Parquet
- javascript - How to convert an array [] to a series of { key: value } paired objects?
- reactjs - React Typescript:遍历国家列表以创建选择输入
- c# - .Net Core ChallengeRequest 未重定向到指定的 RedirectUri
- python - 消息错误:类型错误:无法连接到服务器
- r - 从可变长度的 R 字符串中提取前两个字符
- python - 如何跟踪涉及循环和列表的代码?
- c - 我的输入程序,在双链表中以错误代码-1073741819(0xC0000005)终止
- vue.js - 在 nuxt extendRoutes 中使用重定向功能