Mockitoがvoidメソッドをテストすると例外がスローされる


399

void戻り値の型を持つメソッドがあります。また、いくつかの例外がスローされる可能性があるため、スローされている例外をテストしたいと思います。すべての試行が同じ理由で失敗しました:

タイプStubberのメソッドwhen(T)は引数に適用できません(void)

特定の例外をスローするメソッドを取得する方法はありますか?

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

回答:


706

括弧が間違って配置されています。使用する必要があります

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);
                                          ^

ではなく

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
                                                                   ^

これはドキュメントで説明されています


7
このMockitoの矛盾がにIましスイッチの理由の一つである@edwardmlyte MoxieMocks
モエル

@clementの両方を使用できます:docs.mockito.googlecode.com/hg/latest/org/mockito/…。例外を作成してもスローされません。
JBニゼット2015

1
@JB Nizet完全に同意しますが、doThrow(Exception.class)ではなくdoThrow(new Exception())と書いた場合、テストを起動すると次のエラーが発生します。例外com.company.project.exception.ElementNotFoundExceptionが予期されていましたが、org.mockito.exceptions.base.MockitoExceptionが発生しました:
クレメント

2
テスト中のコード、テストのコード、例外の完全なスタックトレースについて、別の質問をします。
JBニゼット2015

6
doThrow(new Exception())。when(object).voidMethod(any());
Soumyajit Swain 2016

14

Mockitoの新しいBDDスタイルを使用してそれを行う方法を疑問に思った場合:

willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));

そして、将来の参照のために、例外をスローして何もしない必要があるかもしれません:

willThrow(new Exception()).willNothing().given(mockedObject).methodReturningVoid(...));

1
ここに投稿していただきありがとうございます。メソッドが値を返す場合:given(mockedObject.methodReturningAnObject())。willThrow(new Exception()); メソッドが何も返さない場合:willThrow(new Exception())。given(mockedObject).methodReturningVoid(...)); 説明javadoc:「コンパイラーは括弧内のvoidメソッドを好まないため、{@ link Mockito#when(Object)}(またはBDDMockito.given)とは異なるアプローチが必要です。」
Wolf359
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.