Gmock-严格的模拟和唯一的ptr-如何将模拟传递给impl

问题描述 投票:0回答:1

这里是示例代码:

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构造函数。

c++11 googletest gmock
1个回答
0
投票
#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而不是引用。

© www.soinside.com 2019 - 2024. All rights reserved.