Google Mock Expect_call将退休另一个期望

google mock expect_call to retire another expectation

本文关键字:另一个 期望 call Mock Expect Google      更新时间:2023-10-16

我有两个模拟。他们中只有一个人应要求进行一次运行,我想使用期望来弄清楚execute()功能是否成功而不从给定的先决条件中知道。
如何实现?

Mock1 successMock;
Mock2 failMock;
EXPECT_CALL(successMock, performOnSuccess()).Times(1);
EXPECT_CALL(failMock, performOnFail()).Times(0);
execute(successMock, failMock);

上面的要么有效或低于期望,但只有一个。

EXPECT_CALL(successMock, performOnSuccess()).Times(0);
EXPECT_CALL(failMock, performOnFail()).Times(1);

您的期望是一个(和只有一个(合作者。

一个可行的解决方案(如其他语言中所示(是将这些模拟在测试范围中递增共享计数器。

您可以通过定义动作来通过GoogleMock实现这一目标。会这样:

SuccessMock successMock;
FailMock failMock;
int callCounter = 0;

ON_CALL(successMock, performOnSuccess())
  .WillByDefault(InvokeWithoutArgs([&]()
                 {
                     callCounter++;
                 });
ON_CALL(failMock, performOnFailure())
  .WillByDefault(InvokeWithoutArgs([&]()
                 {
                     callsCounter++;
                 });

execute(successMock, failMock);
ASSERT_THAT(callsCounter, Eq(1));

这样说,这个测试的随机性是我真的不喜欢。您应该最终会进行一个预期失败的测试,另一个期望成功。

我为此写了一个简化的要点。

相关文章: