246

特定のメソッドが呼び出されたときに、モックされたオブジェクトの 1 つにチェック済みの例外をスローさせようとしています。私は次のことを試しています。

@Test(expectedExceptions = SomeException.class)
public void throwCheckedException() {
    List<String> list = mock(List.class);
    when(list.get(0)).thenThrow(new SomeException());
    String test = list.get(0);
}

public class SomeException extends Exception {
}

ただし、次のエラーが発生します。

org.testng.TestException: 
Expected exception com.testing.MockitoCheckedExceptions$SomeException but got org.mockito.exceptions.base.MockitoException: 
Checked exception is invalid for this method!
Invalid: com.testing.MockitoCheckedExceptions$SomeException

Mockitoのドキュメントを見ると、彼らはのみを使用しています.Mockitoを使用RuntimeExceptionしてモックオブジェクトからチェック済みの例外をスローすることはできませんか?

4

5 に答える 5

308

Java API でListを確認してください。メソッドは、 which extendsのみをスローするように宣言されて
います。その特定のメソッド呼び出しによってスローされることは無効な 例外をスローするように Mockito に指示しようとしています。get(int index)IndexOutOfBoundExceptionRuntimeException
SomeException()

さらに明確にするために。List
インターフェースは 、メソッドからスローされるチェック済みの例外を提供していないため、Mockito が失敗しています。 モックされた Listを作成すると、 MockitoはList .class の定義を使用してそのモックを作成します。 get(int index)

メソッドがスローしないため、Mockito が失敗する ため、で指定している動作when(list.get(0)).thenThrow(new SomeException()) は List API のメソッド シグネチャと一致しません。get(int index)SomeException()

本当にこれを行いたい場合は、API がスローされる唯一の有効な例外であることを指定しているため、 Mockito に a をスローさせるnew RuntimeException()か、さらには a をスローさせることをお勧めします。new ArrayIndexOutOfBoundsException()

于 2010-09-21T15:58:46.020 に答える