当前位置: 首页 > 知识库问答 >
问题:

如何设置spring上下文:Component-Scan扫描单元测试环境中的“src/main/java”而不是“src/test.java”

谷翰飞
2023-03-14

我对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/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

所以,我想问一下,有没有一种方法可以改变组件扫描,让它扫描src/main/java中定义的bean/类,而不是spring maven单元测试中的src/test/java?

共有1个答案

谯阳伯
2023-03-14

若要获得BeanFactor,可以实现BeanFactoryAware

 类似资料:
  • 我对spring和Maven是新手。最近,我构建了spring MVC项目,并使用maven来管理项目结构和依赖关系。 当我编写单元测试时,我遇到了一个问题,那就是我无法从“src/main/java”获取bean,而上下文似乎只从“src/test/java”加载bean。 这是我的代码。 单元测试:src/test/java/com/web/component/form 配置XML文件:src

  • 我正在使用Maven3.3.9,并使用Eclipse在Spring工具套件中创建了一个Maven Web项目。 最近我读了一个关于用maven项目配置JPA的教程。 显示JPA配置的教程 我使用Eclipselink2.5成功配置了数据库连接 我面临的问题是,在单击ok之后,使用项目方面属性配置JPA2.1。persistence.xml是在src/main/java的META-INF下自动创建的

  • 业务逻辑类:测试用例类: 我尝试过清理,将testResources目录放在POM中。我不想在类路径中添加classes文件夹。请指教。

  • 我从这个站点上前面的回答中了解到,对于Maven构建: 将部署到生产中,而将不部署到生产中。 包含主应用程序,而将包含测试主应用程序的代码 现在我的问题是,在编写测试框架时,哪种方法更好/更差: 测试框架本身将是主应用程序-因此它将驻留在?上 测试框架将仅用于测试主应用程序-因此将驻留在?上 但不知何故,我无法想象一个测试框架被部署到生产中。 方法2似乎是正确的,但是如果主要目的是编写一个测试框架

  • 我有一个目录结构如下的maven模块,我想在中获取的路径 我使用进行了尝试,但它给出了一个空值。 无法获取资源的路径

  • 我有两个给定接口的实现,都用@Component注释。 src/main中有一个实现- 我在src/test中有一个测试类ABCTest.java,用 @Runwith(SpringRunner.class)、@SpringBoottest、@ContextConfigation、@ComponentScan、@EnableAutoConfigation 我希望这个ABCTest.java在运行测