Mockitoを使った例外投げ

1概要

このクイックチュートリアルでは、Mockitoで例外をスローするようにメソッド呼び出しを構成する方法に焦点を当てます。

ライブラリの詳細については、/mockito-final[Mockito series]のリンクも参照してください。

これらの例で使用する簡単な辞書クラスは次のとおりです。

class MyDictionary {
    private Map<String, String> wordMap = new HashMap<>();

    public void add(String word, String meaning) {
        wordMap.put(word, meaning);
    }

    public String getMeaning(String word) {
        return wordMap.get(word);
    }
}

2非 ボイド 返品タイプ

まず、私たちのメソッドの戻り値の型が void でなければ、__when()を使うことができます。

@Test(expected = NullPointerException.class)
public void whenConfigNonVoidRetunMethodToThrowEx__thenExIsThrown() {
    MyDictionary dictMock = mock(MyDictionary.class);
    when(dictMock.getMeaning(anyString()))
      .thenThrow(NullPointerException.class);

    dictMock.getMeaning("word");
}

呼び出し時に NullPointerException をスローするように getMeaning() メソッド( String 型の値を返す)を設定していることに注意してください。

3 ボイド 返品タイプ

さて、もし私たちのメソッドが voidを返したら、 doThrow()__を使います

@Test(expected = IllegalStateException.class)
public void whenConfigVoidRetunMethodToThrowEx__thenExIsThrown() {
    MyDictionary dictMock = mock(MyDictionary.class);
    doThrow(IllegalStateException.class)
      .when(dictMock)
      .add(anyString(), anyString());

    dictMock.add("word", "meaning");
}

ここでは、呼び出されたときに IllegalStateException をスローするように add() メソッド( void を返す)を構成しました。

when()。thenThrow() void の戻り値の型と一緒に使用することはできません。コンパイラーは角かっこ内の void メソッドを許可しないからです。

4オブジェクトとしての例外

例外自体の設定については、前の例のように、またはオブジェクトとして、例外のクラスを渡すことができます。

@Test(expected = NullPointerException.class)
public void whenConfigNonVoidRetunMethodToThrowExWithNewExObj__thenExIsThrown() {
    MyDictionary dictMock = mock(MyDictionary.class);
    when(dictMock.getMeaning(anyString()))
      .thenThrow(new NullPointerException("Error occurred"));

    dictMock.getMeaning("word");
}

そして doThrow() でも同じことができます。

@Test(expected = IllegalStateException.class)
public void whenConfigVoidRetunMethodToThrowExWithNewExObj__thenExIsThrown() {
    MyDictionary dictMock = mock(MyDictionary.class);
    doThrow(new IllegalStateException("Error occurred"))
      .when(dictMock)
      .add(anyString(), anyString());

    dictMock.add("word", "meaning");
}

5スパイ

モックで行ったのと同じ方法で例外をスローするように Spy を設定することもできます。

@Test(expected = NullPointerException.class)
public void givenSpy__whenConfigNonVoidRetunMethodToThrowEx__thenExIsThrown() {
    MyDictionary dict = new MyDictionary();
    MyDictionary spy = Mockito.spy(dict);
    when(spy.getMeaning(anyString()))
      .thenThrow(NullPointerException.class);

    spy.getMeaning("word");
}

6. 結論

この記事では、Mockitoで例外をスローするようにメソッド呼び出しを構成する方法を調べました。

いつものように、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/testing-modules/mockito[over GitHub]にあります。

前の投稿:JavaServer Faces(JSF)とSpring
次の投稿:ASMによるJavaバイトコード操作の手引き