改变gmock期望

时间:2013-11-06 02:35:39

标签: c++ unit-testing mockito gmock

我想用GMock编写单元测试。但是,我的熟悉程度主要与Mockito有关。我在Mockito写的是:

Mockito.verify(mock, Mockito.never()).someFunctionCall(Matchers.<String>any());
doSomething(mock);
Mockito.verify(mock, Mockito.times(1)).someFunctionCall(Matchers.<String>any());
doSomethingElse(mock);

这与验证doSomething永远不会调用someFunctionCall相对应,但doSomethingElse只调用一次。

我如何用GMock完成同样的事情?

EXPECT_CALL(mock, someFunctionCall(_)).Times(0);
doSomething(mock);
EXPECT_CALL(mock, someFunctionCall(_)).Times(1);
doSomethingElse(mock);

由于期望叠加,显然不起作用。

2 个答案:

答案 0 :(得分:1)

对于类似的东西,你可能想要设置两个不同的测试。一个用于doSomething,另一个用于doSomethingElse。或者,如果第二个的行为取决于第一个,您可以执行以下操作:

{
  MyMock mock;
  EXPECT_CALL(mock, someFunctionCall(_)).Times(0);
  doSomething(mock);
}
{
  MyMock mock;
  EXPECT_CALL(mock, someFunctionCall(_)).Times(1);
  doSomethingElse(mock);
}

断言的验证是在对象销毁时完成的,因此将每个模拟器确定为只需要它的调用集将验证断言。但实际上,我可能会尝试将两种方法的测试分成单独的测试。如果您有不想重复的样板设置,请将其粘贴到TEST_F派生自的基类中。

答案 1 :(得分:1)

Mock :: VerifyAndClearExpectations / Mock :: VerifyAndClear可用于这些目的。