是否可以在Google Mock中制定范围预期?

时间:2015-03-13 10:51:53

标签: c++ gmock

是否可以使用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()中将匹配并通过的期望。

有人知道这是否可行?

1 个答案:

答案 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))检查所有来电。在测试之前,仍然会接受任何电话。