【问题标题】:How to keep the parameter the same in gtest如何在gtest中保持参数相同
【发布时间】:2022-08-18 22:39:55
【问题描述】:

假设函数

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

希望号码在调用之前和之后相同,而不关心 foo 中发生的事情。

  • gtest 与这个问题到底有什么关系?
  • 大概您无法控制 foo 所做的事情,也无法将原型更改为按值接受 num。将参数复制到另一个变量中并让foo 破坏副本。

标签: c++ mocking googletest


【解决方案1】:

您不应将参数“num”作为参考“&”传递。 将其作为值传递: bool foo(int num) {...} foo() 之外的 num 将保持不变。

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

【讨论】:

  • 更改被测功能以对其进行测试是徒劳的。你不再测试你需要测试的东西。
【解决方案2】:

解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2019-04-28
    相关资源
    最近更新 更多