c++ - 在 expect_call 中使用的 SaveArg 值
问题描述
我必须遵循模拟函数
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
解决方案
实现此目的的一种方法是使用SaveArg
whenDoSomething2
被调用,然后比较保存的 argsDoSomething
和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)));
推荐阅读
- python - 如何使用 python 在 mapreduce 中获得直方图(Graph)中的结果?
- r - 使用 Plotly 的交互式绘图
- unity3d - 如何从 SteamVR 2.0 获取 Unity 项目的 Vive 控制器转换组件?
- python - 运行 python pd.read_csv 代码时收到错误消息
- c++ - sfml dosen't want to link in visual studio 2019
- react-native - React 原生视频 Cookie
- z3 - Quantifiers with MaxSMT in z3
- arcgis-js-api - TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'. Arcgis 4.13
- java - Tomcat 7: Sonar compliant setHttpOnly(true) for Cookie
- django - 通过 Django 创建方法传递保存参数