Spring Boot 2系にあげたときにやったことをまとめようと思います。関連記事 今回は、Testingの話です。Spring Boot 2.0.9.RELEASEに上げた話になります。2.2対応はまたいつか書きます。
依存しているライブラリのバージョン
Spring Bootのバージョンを1.5.22
から2.0.9
に上げると依存しているライブラリのバージョンが次のようになります。
Spring Boot 1.5.22.RELEASE → Spring Boot 2.0.9.RELEASE
Spring Boot 2.xに上げると、Mockito 2.xになります。 JUnit 5も対応しましたが、対応しただけでデフォルトはJUnit 4になっていますのでご注意ください。Spring Booot 2.2.xからデフォルトがJUnit 5になります。
パッケージ変更
- import org.mockito.runners.MockitoJUnitRunner; + import org.mockito.junit.MockitoJUnitRunner;
- import org.mockito.Matchers.* + import org.mockito.ArgumentMatchers.*
- org.mockito.Matchers.anyListOf.(Hoge.class); + org.mockito.ArgumentMatchers.anyList();
など
不要なスタブの削除
利用していないスタブがある場合は、UnnecessaryStubbingExceptionを投げるようになりました。 行番号を教えてくれるのでひたすら削除します。
例えば、このようなテストを書いていたとします。
String result = translator.translate("one"); // test when(translator.translate("one")).thenReturn("jeden"); when(translator.translate("two")).thenReturn("dwa");
when(translator.translate("two")).thenReturn("dwa");
のスタブは作ったけど、実際呼ばれることがないのでUnnecessaryStubbingExceptionが投げられます。
歴史のあるコードだと消し忘れはいっぱいあると思うので地味に辛いですね...
まとめ
Spring Boot 2.0.xへのテストのマイグレーションは特に難しくはなかったですけど、単なる書き換えが多くて眠かったです。2.1.x, 2.2.xの変更の方が大変です。 ちなみにJUnit 5からHamcrestがデフォルトで入らなくなりましたのでこれを機にAssertJに移行してみてはいかかでしょうか?