@WebMvcTest
アノテーションを使用してテストを作成していて、アプリケーションクラスに@ComponentScan
注釈があると、テストの予想される動作が中断されることがわかりました。アプリケーションクラス内の@ComponentScanが@WebMvcTestと@SpringBootTestを中断する
WebMvcTest
のjavadocによると:フル自動設定を無効にし、代わりに(MVCテストに関連する構成のみを適用します。この注釈を使用して
すなわち
@Controller
、@ControllerAdvice
、@JsonComponent Filter
、WebMvcConfigurer
とHandlerMethodArgumentResolver
豆ではなく@Component
、@Service
または@Repository
豆)。」
問題は@ComponentScan
と、それはインストであるということです@Service
と注釈を付けた抗豆。 @ComponentScan
の代わりに@SpringBootApplication
アノテーションにスキャンベースパッケージを指定すると、すべてが期待通りに機能します。
@WebMvcTest
注釈でコントローラクラスを指定すると、別の問題が発生します。アプリケーションクラスに@ComponentScan
アノテーションがある場合、指定されたものだけをロードするのではなく、すべてのコントローラをロードします。
これはSpring Bootのバグですか?
excludeFilters
という属性が@SpringBootApplication
アノテーションで利用できないため、@ComponentScan
を使用します。
解決方法私は、@Configuration
アノテーションを持つ別のクラスを作成し、そこで@ComponentScan
を移動することを発見しました。
私は答えに同意しません。また、[進行中の議論](https://github.com/spring-projects/spring-boot/issues/10933#issuecomment-342131539)もあります。 –
このページhttps://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/は「@ComponentScanを@SpringBootApplication経由で直接使用する場合は、TypeExcludeFilterを登録する必要があります。私は答えが正しいと信じています。 –