我有一个这个班级
@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)}
答案 0 :(得分:1)
您可以在配置中添加上传@Component的组件扫描(" A")
像这样:TextWatcher
这将解决您的异常,然后如果已插入B,则可以断言Bean A.
答案 1 :(得分:-1)
据我了解你的问题,我认为你正在使用JUnit来测试一些不是单元测试但更接近集成测试的东西,这超出了JUnit的范围。
JUnit将始终假设您已经正确初始化了要测试的类,依赖项解析并不是它的责任。
而且,正如您所看到的,如果依赖关系未得到解决,Spring会赢得该测试的开始