c++ - expect_call 中使用的 SaveArg 值

标签 c++ c++14 googletest googlemock

我必须遵循模拟函数

DoSomething(const char* par0, const char* par2)
DoSomething2(std::string);

我将 DoSomething 的值保存到

std::string savedPar_;

我想在 DoSomething2 中使用它。如何做到这一点?

EXPECT_CALL(mockd_, DoSomething(_, _,))
                .WillOnce(DoAll(SaveArg<1>(&savedPar_), (Return(Ok))));
       
EXPECT_CALL(mockd_, DoSomething2(savedPar_,))
                .WillOnce((Return(Ok)))); 
      // has not yet the val


sut_->work();
// savedPar_ has the value

最佳答案

实现此目的的一种方法是在调用 DoSomething2 时使用 SaveArg,然后比较从 DoSomethingDoSomething2 保存的参数

  EXPECT_CALL(mockd_, DoSomething(_, _))
                .WillOnce(DoAll(SaveArg<1>(&savedPar1_), (Return(Ok))));
       
  EXPECT_CALL(mockd_, DoSomething2(_))
                .WillOnce(DoAll(SaveArg<0>(&savedPar2_), (Return(Ok))));

  EXPECT_EQ(savedPar1_, savedPar2_);

另一种是创建一个接收指针的自定义匹配器,像这样

MATCHER_P(SameAs, value, PrintToString(*value)) { 
  return arg  == *value; 
}

你的期望是这样的

  EXPECT_CALL(mockd_, DoSomething(_, _))
                .WillOnce(DoAll(SaveArg<1>(&savedPar_), (Return(Ok))));
       
  EXPECT_CALL(mockd_, DoSomething2(SameAs(&savedPar_)))
                .WillOnce((Return(Ok)));

关于c++ - expect_call 中使用的 SaveArg 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69545700/

相关文章:

c++ - 使用 std::bind 时出现运行时错误

c++ - 通过谷歌测试测试异步调用

googletest - 如何在--gtest_filter 中指定多个排除过滤器?

c++ - 存储任何(但恒定)长度的 std::arrays 集

c++ - 用于庞大遗留代码库的 MSTest

c++ - 为什么不能为 <map> 类型的函数参数设置默认值?

c++ - 将 int64_t 转换为 double

c++ - 为什么这个程序会显示看似随机的字符? (C++)

c++ - 如何在模板变量定义中引入static_assert

c++ - 这是使用 std::shared_ptr<void> 的好方法吗?