如何在gtest中保持参数不变



假设函数

bool foo(int& num) {
// do something and change the num
return true;
}

希望调用foo前后的num相同,而不关心foo中发生了什么。

您不应该传递参数"num";作为参考"&";。将其作为值传递:bool-foo(int num({…}foo((外的num将保持不变。

以下是关于通过引用传递的更多信息:https://www.w3schools.com/cpp/cpp_function_reference.asp

解决方案1:

复制参数值:

int prev_num = num;
foo(num);
num = prev_num;

解决方案2:使用包装

// Wrapper uses pass by value for num
bool fooWrapper(int num) {
return foo(num);
}
// Then later use the fooWrapper instead of foo:
fooWrapper(num);

你的问题是模糊的,以确定什么是正确的答案。

以下是我的猜测:
我假设您想要测试foo在某些情况下不会改变参数的值:

struct Param
{
int value;
};
class MagicFoo : public testing::TestWithParam<Param>
{};
TEST_P(MagicFoo, ArgIsNotChanged)
{
auto x = GetParam().value;
ASSERT_TRUE(foo(x));
ASSERT_THAT(x, GetParam().value);
}

完整的现场演示

相关内容

  • 没有找到相关文章

最新更新