首页 > 解决方案 > 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 机制有用。

标签: testingintegration-testinggoogletestgooglemock

解决方案


推荐阅读