Spring 启动测试未检测到测试中的静态嵌套 @Named 组件 class

Spring Boot Test does not detect static nested @Named component in test class

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

@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";
        }
    };
}

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

的错误

如何将其注入到测试实例中?

编辑

OuterBeanTest.javasrc/test/javacom.general 包中,而 Spring 引导应用程序在 src/main/java[=23 的 com 包中=]

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 但现在我已经升级到 Spring-4.3.7 并且它停止工作了。

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

因此,您有两个选择。

  1. InnerBeanTest 移动到顶级 class,或者...
  2. @Import(OuterBeanTest.InnerBeanTest.class)注释OuterBeanTest

此致,

山姆