我必须遵循模拟函数
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
,然后比较从 DoSomething
和 DoSomething2 保存的参数
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/