C++ google mock expect_取消另一项预期
我有两个mock。一次运行只能调用其中一个函数,我想用期望值来判断C++ google mock expect_取消另一项预期,c++,googlemock,C++,Googlemock,我有两个mock。一次运行只能调用其中一个函数,我想用期望值来判断execute()函数是否成功,而不需要知道给定的前提条件。 如何做到这一点 Mock1 successMock; Mock2 failMock; EXPECT_CALL(successMock, performOnSuccess()).Times(1); EXPECT_CALL(failMock, performOnFail()).Times(0); execute(successMock, failMock); 上述任何一
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));
说到这里,这个测试有一些随机性,我不太喜欢。你应该有一个测试预期失败,另一个测试预期成功
我为此写了一篇简写 我不能很好地理解你的情况。你能再详细一点吗?这些期望来自两个不同的测试用例吗?就我所知,您不确定调用
execute
时会发生什么,我不认为这是mock的用例……我希望两个期望集在同一个测试用例中都有效,但完全有效,正如您所说,我不确定execute的结果是什么,但我知道只应该调用其中一个mock