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

标签 c++ googlemock

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

相关文章:

c++ - 从 WindowsAPI 调用 NetLocalGroupAddMembers 时,安全 ID 结构无效错误

c++ - 使用 Boost Python 将 C++ 数组包装成 numpy 数组

c++ - 使用 Gmock 在 Cpp 中的另一个非虚拟方法中模拟一个非虚拟方法

c++ - 如何谷歌模拟从结构调用的方法

c++ - 对 Google Mock 返回的引用所做的更改能否反射(reflect)在原始值中?

c++ - Google Mock 未报告低于预期的通话

c++ - 这段代码不应该崩溃吗

c++ - 如何在 C++ 中标记字符串?

c++ - 使用谷歌模拟测试 C++ 时无法推断模板参数

c++ - memset() 或值初始化以将结构清零?