Mockitoを利用したテスト時に、モック化したオブジェクトの例外のスローについてのメモになります。
事前準備
前回の記事で使用したコードを少し修正してデータ送信時に不正な引数があった場合に例外を投げるようにしてみます。
- SendDataクラス:何かのデータ送信を実行し、その結果(文字列)を返す
- SendDataServiceクラス:SendDataクラスを実行し、その文字数を返す
// SendDataService.java public class SendDataService { @Autowired private SendData sendData; public int execute() { String result; try { result = sendData.send("foo", "bar"); } catch (IllegalArgumentException exception) { result = ""; } return result.length(); } }
テストコードの作成
以下が作成したテストコードとなります。
// SendDataServiceTest.java import static org.mockito.Mockito.doThrow; public class SendDataServiceTest { @InjectMocks private SendDataService service = new SendDataService(); @Mock private SendData sendData; @Before public void setup() { MockitoAnnotations.initMocks(this); } @After public void tearDown() throws Exception { } doThrow(new IllegalArgumentException()).when(sendData).send(anyString(), anyString()); try { // 実行 int result = service.execute(); MatcherAssert.assertThat(result, CoreMatchers.is(0)); } catch (Exception exception) { exception.printStackTrace(); fail(); } }
モック化したオブジェクトであるsendDataのsendメソッドを実行した際にdoThrowメソッドで例外をスローすることができます。
構文は以下の通りとなります。
doThrow(RuntimeException.class).when(mock).someVoidMethod();
これにより例外発生時のテストも簡単に行うことができます。