gpt4 book ai didi

c++ - gmock 有没有办法在不调用的情况下返回修改后的输入参数?

转载 作者:行者123 更新时间:2023-12-02 18:21:44 24 4
gpt4 key购买 nike

我想做这样的事情:

EXPECT_CALL(*mock, method(5)).WillOnce(Return(arg1 * 2));

其中 arg1 应等于被调用方法的第一个参数。有没有一种方法可以在不进行 testing::Invoke 的情况下做到这一点?

最佳答案

方法一:

您可以使用自定义匹配器,正如另一个答案提到的那样,但是请注意,使用自定义匹配器的首选方法是使用仿函数,而不是 ACTION 宏(请参阅 here )。

这是一个例子:

// Define a functor first:
struct Double {
template <typename T>
T operator()(T arg) {
return 2 * (arg);
}
};


TEST(MyTest, CanDoubleWithFunctor) {
MyMock mock;

// Use the functor in the test:
EXPECT_CALL(mock, method(5)).WillOnce(Double{});

EXPECT_EQ(mock.method(5), 10);
}

请参阅此处的工作示例:https://godbolt.org/z/h4aaPdWMs


方法2:

除了自定义匹配器之外,您还可以使用 WithArg see here ,并将第一个参数传递给它,然后该参数将传递给带有一个参数的函数。该函数可以是独立的,也可以是 lambda 函数:

class MyMock {
public:
MOCK_METHOD(int, method, (int), ());
};

TEST(MyTest, CanDouble) {
MyMock mock;

EXPECT_CALL(mock, method(5)).WillOnce(WithArg<0>([](int x) {
return x * 2;
}));

EXPECT_EQ(mock.method(5), 10);
}

查看此working example .

关于c++ - gmock 有没有办法在不调用的情况下返回修改后的输入参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70790295/

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