@WebMvcTest
や@JdbcTest
は、テスト起動時のAuto Configurationで生成されるBeanを減らすことで、テスト時間を削減することが目的です。
対して@SpringBootTest
は基本的にmain()
メソッド実行時と同じだけAuto ConfigurationでBeanが生成されます(特にwebEnvironment = RANDOM_PORT
またはwebEnvironment = DEFINED_PORT
の場合)。
しかし、テスト時間削減により効果的なのはDIコンテナの作成回数を減らすことです。それに比べればAuto Configurationで生成されるBeanを減らすことによる時間削減効果は微々たるものです。
加えて、@WebMvcTest
や@JdbcTest
は一部のBeanが生成されないため、「あれ?この機能が動かないぞ?」といったハマりに頻繁に遭遇します。これのトラブルシュートは不可能ではありませんが、けっこう大変です。
そうなると、基本的には
-
@SpringBootTest
を使う - DIコンテナ作成回数の削減に取り組む
方が時間対効果が非常にいいです。
DIコンテナ作成回数を減らす方法についてはしんどーさんの発表「今こそ知りたいSpring Test」を見てください。
動画 → https://www.youtube.com/watch?v=TSuCehg7J24
スライド → https://speakerdeck.com/rshindo/spring-fest-2020
ただし、@SpringBootTest
にもハマりどころはあるので注意してください。
例: @WebMvcTest
でBean定義されるMockMvc
やWebTestClient
が、@SpringBootTest
ではBean定義されない(@AutoConfigureMockMvc
も付加すればOK)。