根据我的理解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
。)
答案 0 :(得分:1)
当你定义一个方法时,你会错过模拟该方法可以在测试中给你的所有灵活性。
如果你需要在测试中断言createSomething
被调用,你只能在你嘲笑它时才这样做,而不是你有一个标准的方法定义。不是在这种情况下,但是在采用参数的方法的情况下,有一个模拟更好。
如果您需要设置您的方法应执行的默认操作,即使您没有对其设置任何期望,请使用ON_CALL
成员函数中的SetUp
宏执行此操作一个TestFixture
。