谷歌测试集ArgReferee with vector<unique_ptr>

GoogleTest SetArgReferee with vector<unique_ptr>

本文关键字:unique ptr gt 测试 lt ArgReferee with vector 谷歌      更新时间:2023-10-16

我有一个函数,它接受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));
}

我正在尝试使用谷歌测试的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));

正确的方法是什么?

我最终使用了以下解决方法:

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));