gpt4 book ai didi

c++ - 带有vector 的GoogleTest SetArgReferee

转载 作者:行者123 更新时间:2023-12-02 10:32:19 27 4
gpt4 key购买 nike

我有一个函数,需要一个unique_ptr vector :

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

我正在尝试使用Google Test的 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));

关于c++ - 带有vector <unique_ptr>的GoogleTest SetArgReferee,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61815729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com