testing - gmock:改变对方法参数的期望(没有 verifyAndClearExpectations)
问题描述
在我们的项目中,我们有一个很大的模拟对象,其中包含数百个方法。
这是一个生成的文件,我对此无能为力。(而且我知道这是相当错误的方法)
我想编写一个测试,期望使用不同的参数调用其中一些方法:
EXPECT_CALL(mock, foo(VAL_1)).Times(AtLeast(1));
...
EXPECT_CALL(mock, foo(VAL_2)).Times(AtLeast(1));
...
EXPECT_CALL(mock, foo(VAL_3)).Times(AtLeast(1));
问题是,该方法一次应该只有一个有效输入。不使用我应该怎么做VerifyAndClearExpectations
?(我仍然想在同一个模拟中为不同的方法设置一些其他的期望)。
我认为我可以通过以下额外期望来实现这一目标:
EXPECT_CALL(mock, foo(_).Times(0);
EXPECT_CALL(mock, foo(VAL_1)).Times(AtLeast(1));
...
EXPECT_CALL(mock, foo(_).Times(0);
EXPECT_CALL(mock, foo(VAL_2)).Times(AtLeast(1));
...
EXPECT_CALL(mock, foo(_).Times(0);
EXPECT_CALL(mock, foo(VAL_3)).Times(AtLeast(1));
这是一个正确的方法还是我错过了什么?如果上面的代码将在一个千循环的循环中执行怎么办?这些期望是在我最终消耗的某个堆栈上,还是EXPECT_CALL(mock, foo(_).Times(0);
会神奇地清除上述所有期望?
也许我不应该害怕使用VerifyAndClearExpectations
并且只编写几个测试而不是一个执行非常相似(甚至相同)场景但检查不同期望的测试?在当前情况下,我有一些期望在整个测试期间应该是有效的,并且一些期望会以我上面描述的方式改变几次。
是否有任何好的论文/指南可以使用 GMock 处理此类和其他棘手的情况?我没有发现它的文档对于确定何时应该使用特定的 gmock 机制有用。
解决方案
推荐阅读
- scala - 如何从另一个中减去一个 Scala Spark DataFrame(归一化到平均值)
- javascript - 谷歌图表中仪表图表的多个选项
- node.js - Facebook Graph API - 回发事件问题
- codeigniter - 如何在codeigniter中使图像上传可选?
- python-3.x - 具有多个元素的数组的真值是不明确的。在循环中运行 sort_values 时使用 a.any() 或 a.all()
- c# - 如何在 SpecFlow 中的同一解决方案中跨项目共享相同的步骤定义
- angular - Compodoc --includes 选项示例
- xamarin - Xamarin 表单 - 如何增加选项卡式页面中选项卡的宽度?
- javascript - 制作将我的数据与索引配对的数组元素数组
- dns - DNS 配置防火墙以传递连接