2014-01-24 8 views
8

Mit Google Mock 1.7.0, ich habe ein Mock-Objekt mit einer Methode, und ich möchte es erwarten genannt zu werden, und in diesem Fall sollte die verspottet Methode eine Ausnahme aus.Wie ein Mock-Objekt zu machen, eine Ausnahme in Google Mock werfen?

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

Gibt es eine Google Mock-Aktion, die eine Ausnahme auslöst? Ich habe es in der Dokumentation nicht gefunden, aber ich bezweifle, dass es bisher niemand gebraucht hat.

Danke!

Antwort

11

Schreiben Sie einfach eine einfache Aktion, die eine Ausnahme auslöst:

ACTION(MyThrowException) 
{ 
    throw MyException(); 
} 

Und es verwenden, wie Sie mit jedem Standard-Aktion tun würde:

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

Es gibt auch eine googlemock Standardaktion Throw() , dass unterstützt Ausnahmen als Maßnahmen zu werfen (Beachten Sie, dass MyException muss eine kopierbar Klasse, bekommen diese Arbeit!):

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

Hier finden Sie die vollständige Dokumentation für ACTION und parametrisiert ACTION_P<n> Definitionen im GoogleMock CookBook.

+0

Fehler: Makro „ACTION_P“ erfordert zwei Argumente, aber nur 1 gegeben – user1735594

+0

@ user1735594 Sorry, in der Tat 'ACTION_P' soll zusätzliche Parameter erhalten, die nicht in Ihrem Fall erforderlich. Ich werde meine Antwort entsprechend bearbeiten. –

+0

Ich verstehe nicht, warum diese Antwort einen Downvote erhalten hat? Das kann nicht wirklich etwas mit seinem Inhalt zu tun haben, war aber wahrscheinlich persönlich gemeint. –

11

Die Syntax für diese ist Throw(exception), wobei jede Ausnahme kopierbar Wert.

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

-1 Während grundsätzlich richtig, Sie sind nicht die tragfähige Alternativen für nicht kopierbar Ausnahmeklassen zeigen! –