2016-08-09 37 views
3

私は初めてMockitoを使用していますが、when(dao.create(order)).thenThrow(new SQLException());when(dao.create(order)).thenThrow(SQLException.class);の違いが何であるか疑問に思っていました。 どちらもうまく動作しているようで、Mockito APIには何も見つかりません。Mockito:そのときのThrow(例外クラス)とThrow(新しい例外())

私が考えることができる唯一の違いは、new SQLException()を使用すると、コンストラクタに引数を入力できることです。これでしょうか?

答えて

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

これは、あなたから提供された例外オブジェクトをスローします。たとえば、あなたがそのようなnew SQLException("description of exception", "sql:code")

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

など、特定のパラメータと例外を作成することができますこれは、リフレクションを使用して、指定したクラスの既定のインスタンスを作成します。

+0

SQLException.classはなぜ存在しますか?引数を持たない新しいSQLException()と同じことです。それとも特別な理由がありますか? –

+0

これはコールのショートカットです。したがって、Throw(SQLException.class)、次にTrhow(new SQLException())は同じ意味を持ちます。最初のケースでは、指定されたexpcetionクラスのデフォルトのコンストラクタ(パラメータなしのコンストラクタ)が常に必要です。 –

+0

@MartinStrejc OKだから、それは単なるショートカットだ。とった。 –

0

thenThrowは引数としてthrowableをとることができます。スロー可否を監視するべきではありません。これは、ロジックが通常は回復不能なエラーをキャッチできることを意味します。

新しいSQLException()を渡すことはSQLException.classと同じです。

+0

GitHubへのリンクありがとう。私があなたの答えを理解していれば、私はこれを行うべきではありませんthenThrow(Throwable.class) 'Error(Throwableのサブクラス)も捕捉するためです。書き留めました!しかし、私は実際にそのようなことをやろうと思うときは見ません。例外についてのみテストします。 –

関連する問題