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.java
在 src/test/java
的 com.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
。
因此,您有两个选择。
- 将
InnerBeanTest
移动到顶级 class,或者...
- 用
@Import(OuterBeanTest.InnerBeanTest.class)
注释OuterBeanTest
。
此致,
山姆
以下是我的 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.java
在 src/test/java
的 com.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
。
因此,您有两个选择。
- 将
InnerBeanTest
移动到顶级 class,或者... - 用
@Import(OuterBeanTest.InnerBeanTest.class)
注释OuterBeanTest
。
此致,
山姆