2016-08-09 42 views
3

Ich benutze Mockito zum ersten Mal und ich frage mich, was der Unterschied zwischen when(dao.create(order)).thenThrow(new SQLException()); und when(dao.create(order)).thenThrow(SQLException.class); ist. Beide scheinen gut zu laufen und ich kann nichts darüber in der Mockito API finden.Mockito: Unterschied zwischen thetThrow (Exception.class) und thetTrow (new Exception())

Der einzige Unterschied, den ich mir vorstellen kann, ist, dass Sie bei der Verwendung von new SQLException() Argumente im Konstruktor eingeben können. Ist es das?

Antwort

2
when(dao.create(order)).thenThrow(new SQLException()); 

Dies wird das Ausnahmeobjekt zur Verfügung gestellt von Ihnen werfen. Zum Beispiel können Sie eine Ausnahme mit spezifischen Parametern wie new SQLException("description of exception", "sql:code")

when(dao.create(order)).thenThrow(SQLException.class); 

erstellen Dies wird mithilfe von Reflektion eine Standard-Instanz der angegebenen Klasse.

+0

Also, warum SQLException.class existiert? Es ist dasselbe wie neue SQLException() ohne Argumente. Oder gibt es einen bestimmten Grund dafür? –

+0

Es ist eine Abkürzung des Anrufs. Daher haben thetThrow (SQLException.class) und thenThow (new SQLException()) die gleiche Bedeutung. Der erste Fall erwartet immer den Standardkonstruktor (Konstruktor ohne Parameter) der angegebenen Expo- nitionsklasse. –

+0

@MartinStrejc OK, also ist es nur eine Abkürzung. Ich habs. –

0

thenThrow kann ein Throwable als Argument nehmen. Sie sollten nicht auf throwable überwachen, da dies bedeutet, dass die Logik auch Fehler erfassen kann, was normalerweise nicht wiederherstellbar ist.

Passing neue SQLException() entspricht SQLException.class

+0

Danke für den Link zu GitHub. Wenn ich deine Antwort verstehe, sollte ich nicht ThisThrow (Throwable.class) tun, weil es auch Fehler (Unterklasse von Throwable) fängt. OK notiert! Aber ich sehe nicht, wann ich wirklich darüber nachdenken würde, so etwas zu tun, ich teste nur für Ausnahmen. –