gpt4 book ai didi

c++ - 谷歌模拟 expect_call 取消另一个期望

转载 作者:行者123 更新时间:2023-11-30 05:13:45 28 4
gpt4 key购买 nike

我有两个模拟。一次运行只应调用其中一个,我想在不知道给定先决条件的情况下使用期望来确定 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为了这。

关于c++ - 谷歌模拟 expect_call 取消另一个期望,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43786897/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com