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
?