通过 EXPECT_CALL 与主体指定方法的行为

Specifying method's behaviour via EXPECT_CALL vs in body

根据我对 gmock 的理解(我是新手)EXPECT_CALL 允许指定方法在被调用时的行为方式(在这种情况下,我最感兴趣的是它将做什么 return).但我也可以用它的主体明确定义方法。示例:

class Factory
{
    int createSomething();
};

class MockFactory : public Factory
{
    MOCK_METHOD0(createSomething, int());
};

int main()
{
    ...
    int something(5);
    MockFactory mockFactory;
    EXPECT_CALL(mockFactory, createSomething()).WillRepeatedly(Return(something));
    ...
}

class MockFactory : public Factory
{
    int createSomething()
    {
        return 5;
    }
};

现在,如果 createSomething 在不同场景下表现不同(return 不同的事情),那么显然我应该使用 EXPECT_CALL。但是,如果它总是 return 同样的事情,那么显式定义方法的主体不是更好吗? (请注意,模拟 class 中的其他方法可能仍会使用 EXPECT_CALL。)

当您定义一个方法时,您会错过模拟该方法可以在测试中为您提供的所有灵活性。

如果你需要在测试中断言 createSomething 被调用,你只能在你模拟它的情况下这样做,如果你有一个标准的方法定义则不行。不是在这种情况下,但在方法采用参数的情况下,最好有一个模拟。

如果您需要设置您的方法应该执行的默认操作,即使您没有对其设置任何期望,也可以使用 SetUp 成员函数中的 ON_CALL 宏来执行此操作TestFixture.