通过EXPECT_CALL vs在body中指定方法的行为

时间:2016-12-19 10:00:44

标签: googletest googlemock gmock

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

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));
    ...
}

VS

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

现在,如果createSomething在不同场景中表现不同(返回不同的东西),那么显然我应该使用EXPECT_CALL。但是,如果它总是返回相同的东西,那么仅仅明确定义方法的主体会不会更好? (请注意,模拟类中的其他方法可能仍然使用EXPECT_CALL。)

1 个答案:

答案 0 :(得分:1)

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

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

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