gpt4 book ai didi

c++ - gmock SetArgReferee : Set a non-copyable non-moveable object

转载 作者:行者123 更新时间:2023-12-05 07:03:48 37 4
gpt4 key购买 nike

我正在使用 gmock 并模拟了一个函数 boost::beast::http::response_parser作为输出参数。功能签名看起来像:

error_code readFromSocket(boost::beast::http::response_parser& resp);

现在,为了测试此功能,我模拟并使用了 EXPECT_CALL,例如:

boost::beast::http::response_parser respObject;
// set status code in respObject
EXPECT_CALL(mockObject, readFromSocket(_))
.Times(1)
.DoAll(SetArgReferee<0>(respObject), Return(err::success));

它返回一个operator= deleted compilation 错误。我努力了使用 ByRefByMove、使用 std::ref 的各种组合,但都没有有效,我明白为什么它们不起作用。

有没有人遇到过类似的情况,知道怎么解决错误?如果您需要说明,请告诉我。

谢谢。

编辑

这是 readFromSocket 的样子:

template<typename T>
error_code readFromSocket(beast::http::response_parser<T>& resp,
boost::asio::yield_context yield)
{
// read from socket using beast::http::async_read
return success;
}

我就是这样调用它的。

beast::http::response_parser<beast::http::string_body> resp;
resp.body_limit((std::numeric_limits<std::string::size_type>::max)());
auto ec = readFromSocket(resp, yield);

// after this I do error handling and response status code handling.

最佳答案

我试图实现相同的行为,WithArg 是关键。这是我最终得到的示例:

#include <gmock/gmock.h>
#include <gtest/gtest.h>


using namespace testing;

struct NonCopyable {
NonCopyable() = default;
NonCopyable(const NonCopyable&) = delete;
NonCopyable& operator=(const NonCopyable&) = delete;

int a;
};

struct WorkWithNonCopyable {
virtual ~WorkWithNonCopyable() = default;

virtual bool modify_non_copyable(NonCopyable& nc) = 0;
};

struct WorkWithNonCopyableMock {
MOCK_METHOD1(modify_non_copyable, bool(NonCopyable& nc));
};

TEST(WorkWithNonCopyableTest, NormalizedRoiDetectorTest) {
WorkWithNonCopyableMock work_with_non_copyable_mock{};

EXPECT_CALL(work_with_non_copyable_mock, modify_non_copyable(_))
.WillOnce(DoAll(WithArg<0>([](auto& arg) { arg.a = 42; }), Return(true)));

NonCopyable non_copyable;
ASSERT_TRUE(work_with_non_copyable_mock.modify_non_copyable(non_copyable));
ASSERT_EQ(non_copyable.a, 42);
}

关于c++ - gmock SetArgReferee : Set a non-copyable non-moveable object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63121963/

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