10
14

@WebMvcTestや@JdbcTestではなく@SpringBootTestを使おう

Last updated at Posted at 2024-05-04

@WebMvcTest@JdbcTestは、テスト起動時のAuto Configurationで生成されるBeanを減らすことで、テスト時間を削減することが目的です。
対して@SpringBootTestは基本的にmain()メソッド実行時と同じだけAuto ConfigurationでBeanが生成されます(特にwebEnvironment = RANDOM_PORTまたはwebEnvironment = DEFINED_PORTの場合)。
しかし、テスト時間削減により効果的なのはDIコンテナの作成回数を減らすことです。それに比べればAuto Configurationで生成されるBeanを減らすことによる時間削減効果は微々たるものです。
加えて、@WebMvcTest@JdbcTestは一部のBeanが生成されないため、「あれ?この機能が動かないぞ?」といったハマりに頻繁に遭遇します。これのトラブルシュートは不可能ではありませんが、けっこう大変です。
そうなると、基本的には

  1. @SpringBootTestを使う
  2. DIコンテナ作成回数の削減に取り組む

方が時間対効果が非常にいいです。
DIコンテナ作成回数を減らす方法についてはしんどーさんの発表「今こそ知りたいSpring Test」を見てください。
動画 → https://www.youtube.com/watch?v=TSuCehg7J24
スライド → https://speakerdeck.com/rshindo/spring-fest-2020
ただし、@SpringBootTestにもハマりどころはあるので注意してください。
例: @WebMvcTestでBean定義されるMockMvcWebTestClientが、@SpringBootTestではBean定義されない(@AutoConfigureMockMvcも付加すればOK)。

10
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
14