1

我有一个要在 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);

由于期望堆栈,显然不起作用。

4

2 回答 2

3

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

于 2013-11-06T03:20:54.013 回答
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的 s 派生的基类中。

于 2013-11-06T02:59:57.910 回答