代码之家  ›  专栏  ›  技术社区  ›  oberlies Jochen Ehret

Spring启动测试未从同级包中找到bean

  •  0
  • oberlies Jochen Ehret  · 技术社区  · 5 年前

    我有一个 @SpringBootTest

    package org.myproject.server;
    
    // ...
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
    public class ServerITest {
    
        private @Autowired TestHelperBean helper;
    
        // ...
    }
    

    如果 TestHelperBean 在与测试类(或子包)相同的包中定义。

    package org.myproject.server;
    
    import org.springframework.stereotype.Component;
    
    @Component
    public class TestHelperBean {
        // ...
    }
    

    testutils .TestHelperBean'可用:至少需要1个符合autowire候选条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

    @ComponentScan

    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
    @ComponentScan("org.myproject")
    public class ServerITest {
        // ...
    }
    

    有没有办法在Spring引导测试中使用兄弟包中的bean?

    4 回复  |  直到 5 年前
        1
  •  7
  •   oberlies Jochen Ehret    5 年前

    这个 @ComponentScan 不起作用 如果放置 关于考试课 .

    • 将嵌套类添加到测试中,并使用 @Configuration
    • 使用 @Import 测试类上的注释。注意
    • 如果您不介意在其他情况下也从同级包添加类,也可以将 @组件扫描 @配置 类别(或 @Component , @Service
        2
  •  2
  •   shasr    5 年前

    使用componentscan注释,您可以指定“*”以覆盖基本包下的所有子包。

    @ComponentScan({"org.myproject.*", "org.newproj.*"})
    

    示例包结构

    org.myproject 
    org.myproject.abc 
    org.myproject.abcd 
    org.myproject.xyz.abc
    
    org.newproj 
    org.newproj.abc 
    org.newproj.xyz
    

    向Configuration/SpringBootApplication类注册bean

    @Bean
    private TestHelperBean helper() {
        return new TestHelperBean();
    }
    
        3
  •  1
  •   Ryuzaki L    5 年前

    @ComponentScan({"org.myproject","org.myproject. server","org.myproject. sibilings"})
    
        4
  •  0
  •   Alessandro Power    5 年前

    ComponentScan 你说得对。然而 the Spring Boot documentation