gpt4 book ai didi

c++ - 是否可以在 Google Mock 中做出范围内的期望?

转载 作者:太空狗 更新时间:2023-10-29 23:15:29 25 4
gpt4 key购买 nike

是否可以使用 Google Mock 确定预期范围?换句话说,假设我有以下测试夹具:

class Fixture : public testing::Test
{
public:
void SetUp();

void TearDown();

ObjectUnderTest testObject;
MockObject mock;
};

现在,在 SetUp() 函数中,我希望在初始化期间允许多次调用模拟函数:

void Fixture::SetUp()
{
EXPECT_CALL(mock.DoStuff(_)).Times(Any());
testObject.Initialise(mock);
}

在此之后,我希望这个特定的期望超出范围,并且任何对 DoStuff() 的调用都会产生失败。我不能使用 RetiresOnSaturation() 因为它永远不会饱和!

换句话说,如果我有以下测试用例:

TEST_F(Fixture, DoesWhatItsSupposedTo)
{
EXPECT_CALL(mock, DoStuff(Eq(3)));
testObject.DoSomething(mock);
}

如果 DoSomething() 在模拟对象上调用 DoStuff(4),我希望它失败。使用 gmock 默认行为(适用于大多数情况),它将首先检查不匹配的第二个期望;然后它将检查 SetUp() 中的预期是否匹配并通过。

有人知道这是否可行吗?

最佳答案

这可能不是您问题的真正答案,但您可以使用 .Times(0) 明确禁止调用:

TEST_F(Fixture, DoesWhatItsSupposedTo)
{
EXPECT_CALL(mock, DoStuff(Eq(3)));
EXPECT_CALL(mock, DoStuff(Ne(3)))
.Times(0);
testObject.DoSomething(mock);
}

这将期望在该测试中调用一次 DoStuff(3) 并且没有其他调用 DoStuff() - 任何调用都首先根据 DoStuff( Ne(3))。测试前,任何调用仍将被接受。

关于c++ - 是否可以在 Google Mock 中做出范围内的期望?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29030361/

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