我有一个函数,需要一个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));
正确的方法是什么?
我最终使用了这个变通方法。
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));