Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ google mock expect_取消另一项预期_C++_Googlemock - Fatal编程技术网

C++ google mock expect_取消另一项预期

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); 上述任何一

我有两个mock。一次运行只能调用其中一个函数,我想用期望值来判断
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