是否可以使用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()
中将匹配并通过的期望。
有人知道这是否可行?
答案 0 :(得分:0)
这可能不是您的问题的真实答案,但您可以使用.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))
检查所有来电。在测试之前,仍然会接受任何电话。