GoogleTest SetArgReferee with vector<unique_ptr>

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

我有一个函数,需要一个unique_ptr的向量。

void MyObject::myfunc(std::vector<std::unique_ptr<Foo>>& vec)
{
   std::unique_ptr<Foo> f(new Foo);
   vec.emplace_back(std::move(f));
}

我试图用GoogleTest的 SetArgReferee 但我越来越 error: use of deleted function.

我有什么。

class MockMyObject : public MyObject {
public:
    MOCK_METHOD1(myfunc, void(std::vector<std::unique_ptr<Foo>>&));
};

而在我的测试中。

MockMyObject mockObject;
std::vector<std::unique_ptr<Foo>> vecToReturn;
EXPECT_CALL(mockObject, myfunc(_)).WillOnce(SetArgReferee<0>(vecToReturn));

正确的方法是什么?

c++ googletest unique-ptr
1个回答
0
投票

我最终使用了这个变通方法。

class MockMyObject : public MyObject {
public:
    MOCK_METHOD1(callmyfunc, void(std::vector<Foo*>&));
    void myfunc(std::vector<std::unique_ptr<Foo>>& vec)
    {
        std::vector<Foo*> helperVec;
        callmyfunc(helperVec);
        for (const auto& ptr : helperVec) {
            vec.emplace_back(std::unique_ptr<Foo>(ptr));
        }
    }

};

然后把期望值设置在 callmyfunc 而不是 myfunc:

MockMyObject mockObject;
std::vector<Foo*> vecToReturn;
vecToReturn.push_back(new Foo);
EXPECT_CALL(mockObject, callmyfunc(_)).WillOnce(SetArgReferee<0>(vecToReturn));
© www.soinside.com 2019 - 2024. All rights reserved.