Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring测试,如果类解决了它';s的自连线依赖项_Java_Spring_Junit - Fatal编程技术网

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原始应用程序有些不同。我想在这里检查是否所有依赖项都自动解决。我想我理解这一点。但是,由于实际的生产代码没有使用测试所使用的配置,所以这个测试会对实际的生产代码说些什么呢?您正在测试您的测试配置是否正确。