我对spring和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/资源/META-INF/Spring/Applicationontext-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
所以,我想问有没有办法改变组件扫描,让它扫描src/main/java中定义的bean/类,而不是Spring maven单元测试中的src/test/java?
正如其他人提到的,您不将源文件夹包含在组件扫描中。
maven会自动将src/test/java和src/main/java中的类添加到类路径中。按此顺序。
因此,问题可能是由于您的BeanFactory实现造成的。确保BeanFactory实现具有默认构造函数并且已成功创建。要强制排序,可以添加@DependsOn注释(但我认为这不是问题所在)
您是否尝试过在测试中导入正常的应用程序上下文context.xml?如下所示:
<import resource="classpath:applicationContext.xml" />
但这可能会导致一些问题(Springockito可以很容易地用mock替换不需要的bean)。
我不记得遇到过这样的问题。但是Spring在资源类路径声明中的通配符方面有一些限制——也许组件扫描中的通配符也有类似的限制?我通常有一些在测试中导入的基本上下文,所以在那里设置了组件扫描。
你找到答案了吗?
要获取BeanFactory,您可以实现BeanFactoryAware
我对spring和Maven是新手。最近,我构建了spring MVC项目,并使用maven管理项目结构和依赖关系。 在编写单元测试时,遇到了一个问题,就是无法从“src/main/java”获取bean,而上下文似乎只能从“src/test/java”加载bean。 单元测试:src/test/java/com/web/component/form 配置XML文件:src/test/resour
我找不到关于beans xml配置的文档,所以我在这里问:在 在概念上与Java中的包相同吗? 例如,在我的src/main/java(Eclipse中的项目资源管理器视图,平面包演示)中,假设我有4个包com.amazon、com.amazon.entities、com.amazon.services、com.amazon.repositories.在Navigator视图中,我只有“amazo
在使用JUnit进行单元测试期间,Spring autowiring只适用于以下文件: 我能做些什么来扫描所有的文件进行自动跟踪(而不仅仅是在测试目录下)? 进一步资料: 我使用Spring MVC,Hibernate和Maven 我应该添加其他东西来使它工作吗?
我下载了Sonarqube7.0,并将Maven项目设置为使用Sonar扫描器。pom.xml如下所示: 我的项目结构如下所示: src/main/java-->包含应用程序代码。 是不是我漏了什么?
服务类用@service(又名注释,这使它有资格进行自动连接。为什么在单元测试过程中这个类没有被提取和自动连线? 全堆栈跟踪 如果test class用@SpringBootTest进行了注释,那么它将创建整个应用程序上下文,包括数据库连接和许多不相关的bean,而这些bean显然不需要用于这个单元测试(那么它就不是单元测试了!)。希望只有所依赖的bean才应该被实例化,但使用进行模拟的bean除
我正在使用Maven3.3.9,并使用Eclipse在Spring工具套件中创建了一个Maven Web项目。 最近我读了一个关于用maven项目配置JPA的教程。 显示JPA配置的教程 我使用Eclipselink2.5成功配置了数据库连接 我面临的问题是,在单击ok之后,使用项目方面属性配置JPA2.1。persistence.xml是在src/main/java的META-INF下自动创建的