如果类解决了它的Autowired依赖关系,则进行Spring Test

时间:2017-05-25 07:12:06

标签: 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)
@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)}

2 个答案:

答案 0 :(得分:1)

您可以在配置中添加上传@Component的组件扫描(" A")

像这样:

TextWatcher

这将解决您的异常,然后如果已插入B,则可以断言Bean A.

答案 1 :(得分:-1)

据我了解你的问题,我认为你正在使用JUnit来测试一些不是单元测试但更接近集成测试的东西,这超出了JUnit的范围。

JUnit将始终假设您已经正确初始化了要测试的类,依赖项解析并不是它的责任。

而且,正如您所看到的,如果依赖关系未得到解决,Spring会赢得该测试的开始