@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)。