私は春とMavenが初めてです。そして最近、Spring MVC プロジェクトをビルドし、maven を使用してプロジェクト構造と依存関係を管理しています。
単体テストを作成すると、「src/main/java」から Bean を取得できないという問題が発生し、コンテキストは「src/test/java」からのみ Bean をロードするようです。
これが私のコードです。
単体テスト: src/test/java/com/web/component/form
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:META-INF/spring/applicationContext-web-test.xml"})
public class FormTest {
@Autowired
private BeanFactory beanFactory; // I override this bean by myself
}
構成 XML ファイル: src/test/resources/META-INF/spring/applicationContext-web-test.xml ここで、次のコンポーネント スキャンは、src/test/java で定義された Bean のみをスキャンし、src/main/java ではスキャンしないようです。
<context:component-scan base-package="com.web">
<context:exclude-filter expression=".*_Roo_.*" type="regex"/>
<context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>
オーバーライド BeanFactory クラスは src/main/java/com/web/helper/ にあります。
エラー:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.web.helper.BeanFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:924)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:793)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 41 more
それで、コンポーネントスキャンを変更して、Spring Mavenユニットテストでsrc/test/javaの代わりにsrc/main/javaで定義されたBean/クラスをスキャンする方法があることを尋ねたいですか?