Java Spring测试上下文自动连线

Java Spring测试上下文自动连线,java,testing,spring-boot,spring-boot-test,Java,Testing,Spring Boot,Spring Boot Test,对于这个愚蠢的问题,我很抱歉,但是我不明白为什么这段代码不能与Spring一起工作 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader = AnnotationConfigContextLoader.class) public class DBDumpTest { @Autowired private DataSource source; @Configuration stat

对于这个愚蠢的问题,我很抱歉,但是我不明白为什么这段代码不能与Spring一起工作

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
public class DBDumpTest {
    @Autowired
    private DataSource source;

    @Configuration
    static class ContextConfiguration {
        @Bean
        public DataSource dataSource() {
            return Mockito.mock(DataSource.class);
        }
    }

    @Test
    public void testDump() throws Exception {
        Assert.assertNotNull(source); //OK
        Assert.assertNotNull(new DBDump().getDatasource()); //NULL NOT OK
    }
}
课堂上:

public class DBDump {
    private static final Logger logger = LoggerFactory.getLogger(DBDump.class);

    @Autowired
    private DataSource datasource;


    public DataSource getDatasource() {
        return datasource;
    }
}

那么,为什么new DBDump().getDatasource()不返回模拟实例,而在测试类中@Autowired注释似乎可以工作呢?

我认为在启动整个spring上下文时,没有必要模拟datasource。无论如何,您必须告诉我们到底什么不起作用。我希望新的DBDump().getDatasource()不是空的,而是通过@Autowired从ContextConfiguration注入的。DataSource只是一个示例类,它可以是任何其他bean。为什么Spring应该注入Spring范围外新创建的实例(新DBDump()),我认为在启动整个Spring上下文时,没有必要模拟DataSource。无论如何,您必须告诉我们到底什么不起作用。我希望新的DBDump().getDatasource()不是空的,而是通过@Autowired从ContextConfiguration注入的。DataSource只是一个示例类,它可以是任何其他bean。为什么Spring要注入Spring范围之外新创建的实例(新DBDump())。。。