Java Spring测试,如果类解决了它';s的自连线依赖项
我在这门课上有一节课Java Spring测试,如果类解决了它';s的自连线依赖项,java,spring,junit,Java,Spring,Junit,我在这门课上有一节课 @Component("A") public class A { private B b; @Autowired public A(B b) { this.b = b; } } 还有一节课 @Component("B") public class B { public B() { } } 现在我已经写了这个测试 @RunWith(SpringJUnit4ClassRunner.class) @Cont
@Component("A")
public class A {
private B b;
@Autowired
public A(B b) {
this.b = b;
}
}
还有一节课
@Component("B")
public class B {
public B() {
}
}
现在我已经写了这个测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
public class ConstructorAutowiredTest {
@Configuration
static class ContextConfiguration {
@Bean
public B getBBean() {
B b = new B();
return b;
}
}
@Autowired
private B b;
@Test
public void isDependencyResolved() {
assertNotNull(b);
}
}
它也起作用。但是有没有办法测试这个B
bean是否自动注入A
。我正试着这样做,但显然它不起作用
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
public class ConstructorAutowiredTest {
@Configuration
static class ContextConfiguration {
@Bean
public B getBBean() {
B b = new B();
return b;
}
}
@Autowired
private A a;
@Autowired
private B b;
@Test
public void isDependencyResolved() {
assertNotNull(b);
assertNotNull(a);
}
}
例外情况:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.abc.ConstructorAutowiredTest':
Unsatisfied dependency expressed through field 'a'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type 'com.abc.A' available: expected at least 1 bean which qualifies as autowire candidate.
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
您可以在配置中添加一个组件扫描,用于上载@component(“a”) 像这样:
@Configuration
@ComponentScan("some.package")
static class ContextConfiguration {
@Bean
public B getBBean() {
B b = new B();
return b;
}
}
这将解决您的异常,然后您可以在插入了B的情况下断言Bean A。就我理解您的问题而言,我认为您使用JUnit测试的不是单元测试,而是更接近集成测试的东西,这超出了JUnit的范围 JUnit总是假定您已经正确初始化了要测试的类,依赖项解析不是它的职责
而且,正如您所看到的,如果依赖关系没有得到解决,Spring不会让测试启动。很明显,测试失败了,因为依赖关系没有得到解决,至少您现在知道了。你的问题是什么?我看不出你想在这里测试什么。您只是在测试您的测试安全配置。“这有什么意义?”巴勃罗,我知道。但是我不知道如何在这里指定类似于
@ComponentScan(“com.abc”)
的内容。@JBNizet原始应用程序有些不同。我想在这里检查是否所有依赖项都自动解决。我想我理解这一点。但是,由于实际的生产代码没有使用测试所使用的配置,所以这个测试会对实际的生产代码说些什么呢?您正在测试您的测试配置是否正确。