2014-01-24 56 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雖然基本上是正確的,但您並未顯示非可複製異常類的可行替代方案! –

相關問題