google mock expect_call 退出另一个期望
google mock expect_call to retire another expectation
我有两个模拟。对于一个 运行 应该只调用其中一个,我想在不知道给定先决条件的情况下使用期望来确定 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);
您期望的是一个(并且只有一个)协作者被调用。
一个可行的解决方案(如 other languages 中所述)是使这些模拟在测试范围内增加一个共享计数器。
您可以通过 defining actions 使用 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));
话虽如此,这个测试有一些我不太喜欢的随机性。您应该最终得到一个预期失败的测试和另一个预期成功的测试。
我为此写了一个简化的gist。
我有两个模拟。对于一个 运行 应该只调用其中一个,我想在不知道给定先决条件的情况下使用期望来确定 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);
您期望的是一个(并且只有一个)协作者被调用。
一个可行的解决方案(如 other languages 中所述)是使这些模拟在测试范围内增加一个共享计数器。
您可以通过 defining actions 使用 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));
话虽如此,这个测试有一些我不太喜欢的随机性。您应该最终得到一个预期失败的测试和另一个预期成功的测试。
我为此写了一个简化的gist。