如何使模拟对象在Google Mock中抛出异常?

时间:2014-01-24 15:34:44

标签: c++ unit-testing exception throw googlemock

使用Google Mock 1.7.0,我有一个带有方法的模拟对象,我想期望它被调用,在这种情况下,模拟的方法应该抛出异常。

ObjectMock object_mock_;
EXPECT_CALL(object_mock_, method())
  .Times(1)
  .WillRepeatedly(???);

是否存在引发异常的Google Mock操作?我没有在文档中找到它,但我怀疑到目前为止还没有人需要它。

谢谢!

2 个答案:

答案 0 :(得分:14)

此语法为Throw(exception),其中exception是任何可复制值。

ObjectMock object_mock_;
EXPECT_CALL(object_mock_, method())
  .Times(1)
  .WillRepeatedly(Throw(exception));

答案 1 :(得分:13)

只需编写一个引发异常的简单操作:

ACTION(MyThrowException)
{
    throw MyException();
}

并像使用任何标准动作一样使用它:

ObjectMock object_mock_;
EXPECT_CALL(object_mock_, method())
  .Times(1)
  .WillRepeatedly(MyThrowException());

还有一个googlemock标准操作Throw(),它支持在执行操作时抛出异常(请注意,MyException必须是可复制的类才能使其正常工作!):<​​/ p>

ObjectMock object_mock_;
EXPECT_CALL(object_mock_, method())
  .Times(1)
  .WillRepeatedly(Throw(MyException()));

GoogleMock CookBook中查找ACTION和参数化ACTION_P<n>定义的完整文档。