通过 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
.
根据我对 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
.