首页 > 解决方案 > 为 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++proxygoogletestunique-ptr

解决方案


推荐阅读