Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动测试在测试类中未检测到静态嵌套@Named组件_Java_Spring_Spring Boot_Dependency Injection_Spring Test - Fatal编程技术网

Java Spring启动测试在测试类中未检测到静态嵌套@Named组件

Java Spring启动测试在测试类中未检测到静态嵌套@Named组件,java,spring,spring-boot,dependency-injection,spring-test,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.

下面是我测试类的类代码

@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";
        }
    };
}
但是将静态类注入到测试实例中会抛出一个关于
通过字段'innerBean'表示的未满足依赖项的错误;至少需要1个符合autowire候选资格的bean。

如何将其注入测试实例

编辑

OuterBeanTest.java
位于
src/test/java
中的
com.general
包中,而Spring Boot应用程序位于
src/main/java
中的
com
包中

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);
    }
}
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中的测试支持不再自动检测测试类中的静态嵌套组件。这是由于在幕后使用了
org.springframework.boot.test.context.filter.TestTypeExcludeFilter

因此,您有两种选择

  • InnerBeanTest
    移动到顶级类,或
  • @Import(OuterBeanTest.InnerBeanTest.class)
    注释
    OuterBeanTest
  • 问候,


    Sam

    “内部静态”在术语上是矛盾的。见JLS#8.1.3。这是一个静态类。@EJP是显式的,我知道区别。我们缺少一些相关信息:
    OuterBeanTest
    驻留在哪个包中?
    SpringBootApp
    驻留在哪个包中?
    SpringBootApp
    上有哪些注释?
    OuterBeanTest
    不是一个bean:它是一个测试类。因此,我将(尝试)编辑标题。什么是
    TestBean