今回は、Spring boot環境で開発していた際、ディレクトリ構成を修正が必要になり修正をしていた際の原因や解決方法を記載します。
ディレクトリ構成の修正後、単体テスト実行時に以下のようなbeanが読み込めないエラーが発生しました。
単体テスト実行時のエラー(部分的に書き換えています)
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name '単体テストクラス':
Unsatisfied dependency expressed through field 'target': No qualifying bean of type 'injectしているテスト対象のクラス' available:
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.inject.Inject()}
発生理由
@SpringBootApplicationアノテーションを付与したクラスが他のクラスが記載されているディレクトリより上の階層のディレクトリに存在しなかったためでした。
@SpringBootApplicationアノテーションとはスプリングのリファレンスより
・@EnableAutoConfiguration : Spring Boot の自動構成メカニズムを有効にする
・@ComponentScan: アプリケーションが配置されているパッケージで @Componentスキャンを有効にする
・@SpringBootConfiguration : コンテキストでの追加 Bean の登録、または追加の構成クラスのインポートを有効にします。統合テストでの構成検出を支援する、Spring の標準 @Configurationの代替手段です。
とのことでした。
@SpringBootApplicationアノテーションを付与したアプリケーションクラスがあることでSpringの3つの機能を有効化できます。 そのためアプリケーションクラスを適切に配置できていないと今回のようにbeanの参照ができないという事態になります。
結論 フォルダ構成を見直した際、@SpringBootApplicationアノテーションを付与したアプリケーションクラスの階層に注意が必要です。
参考:・Spring Bootのmainファイルは適切な位置に配置しよう(https://tech.excite.co.jp/entry/2023/08/07/161213) ・@SpringBootApplication アノテーションの使用(https://spring.pleiades.io/spring-boot/reference/using/using-the-springbootapplication-annotation.html)
- 閲覧数 22
コメントを追加