2014-01-24 83 views
8

使用Google Mock 1.7.0,我有一个模拟对象与一个方法,我希望它被调用,在这种情况下,模拟方法应该抛出一个异常。如何让模拟对象在Google Mock中引发异常?

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

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

谢谢!

回答

11

只写一个简单的动作抛出异常:

ACTION(MyThrowException) 
{ 
    throw MyException(); 
} 

而且使用它,你会用任何标准动作做:

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

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

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

查找ACTION完整的文件,并在GoogleMock CookBook参数化ACTION_P<n>定义。

+0

错误:宏“ACTION_P”需要2个参数,但只有1个参数 – user1735594

+0

@ user1735594对不起,实际上'ACTION_P'是用来接收额外的参数,这在您的情况下不需要。我会相应地编辑我的答案。 –

+0

我相当不明白为什么这个答案收到downvote?这不可能真的与它的内容有关,但可能是个人的意思。 –

11

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

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

-1虽然基本上是正确的,但您并未显示非可复制异常类的可行替代方案! –