是否可以使用 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/