Spring Boot Test不会在测试类中检测静态嵌套的@Named组件

时间:2017-04-24 12:45:09

标签: java spring spring-boot dependency-injection spring-test

以下是我的测试类的类代码。

@SpringBootTest(classes = { SpringBootApp.class }, webEnvironment = WebEnvironment.RANDOM_PORT)
public class OuterBeanTest {

    @Inject
    InnerBeanTest innerBean;

    @Test
    public void test() {
         assertThat(this.innerBean.print()).isEqualTo("print");
    }

    @Named
    static class InnerBeanTest {

        String print(){
             return "print";
        }
    };
}

但是在测试实例中注入静态类会引发关于Unsatisfied dependency expressed through field 'innerBean'; expected at least 1 bean which qualifies as autowire candidate.

的错误

如何将其注入测试实例?

修改

OuterBeanTest.java位于com.general的{​​{1}}包中,而Spring Boot应用位于src/test/java

中的com包中

src/main/java

SpringBootApp.java

注意:同样有效package com; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootApp { public static void main(String[] args) { SpringApplication.run(SpringBootApp.class, args); } } ,但现在我已升级到Spring-4.2.8,但它已停止工作。

1 个答案:

答案 0 :(得分:1)

Spring Boot 1.4中的测试支持不再自动检测测试类中的静态嵌套组件。这是因为在幕后使用了org.springframework.boot.test.context.filter.TestTypeExcludeFilter

因此,您有两种选择。

  1. InnerBeanTest移至顶级课程,或......
  2. 使用OuterBeanTest注释@Import(OuterBeanTest.InnerBeanTest.class)
  3. 此致

    萨姆