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

use*_*594 14 c++ unit-testing exception throw googlemock

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

ObjectMock object_mock_;
EXPECT_CALL(object_mock_, method())
  .Times(1)
  .WillRepeatedly(???);
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

The*_*ees 15

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

ObjectMock object_mock_;
EXPECT_CALL(object_mock_, method())
  .Times(1)
  .WillRepeatedly(Throw(exception));
Run Code Online (Sandbox Code Playgroud)


πάν*_*ῥεῖ 15

只需编写一个抛出异常的简单操作:

ACTION(MyThrowException)
{
    throw MyException();
}
Run Code Online (Sandbox Code Playgroud)

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

ObjectMock object_mock_;
EXPECT_CALL(object_mock_, method())
  .Times(1)
  .WillRepeatedly(MyThrowException());
Run Code Online (Sandbox Code Playgroud)

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

ObjectMock object_mock_;
EXPECT_CALL(object_mock_, method())
  .Times(1)
  .WillRepeatedly(Throw(MyException()));
Run Code Online (Sandbox Code Playgroud)

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