Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Spring未注入测试bean_Spring_Unit Testing_Spring Boot_Mocking_Autowired - Fatal编程技术网

Spring未注入测试bean

Spring未注入测试bean,spring,unit-testing,spring-boot,mocking,autowired,Spring,Unit Testing,Spring Boot,Mocking,Autowired,在SpringBoot测试中,DataSourceHandler在AppTestCfg中创建,而DataSource在AppCfg中创建。为什么它们不都在AppTestCfg中创建 @Configuration @EnableIntegration public class AppCfg { @Bean public DataSourceHandler getDataSourceHandler(DataSource dataSource) { return new

在SpringBoot测试中,DataSourceHandlerAppTestCfg中创建,而DataSourceAppCfg中创建。为什么它们不都在AppTestCfg中创建

@Configuration
@EnableIntegration
public class AppCfg {
    @Bean
    public DataSourceHandler getDataSourceHandler(DataSource dataSource) {
        return new DataSourceHandler(dataSource);
    }
    @Bean
    public DataSource getSource(DataSourceProps props) {
         // create data source
    }
}
@Configuration
public class AppTestCfg extends AppCfg {
    @Bean
    public DataSourceHandler getDataSourceHandler(){
        return new MockDataSourceHandler();
    }
    @Bean
    public DataSource getSource(){
        return null;
    }
}
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppTestCfg.class)
@EnableConfigurationProperties({DataSourceProps.class})
public class AppTest {
    // tests
}
如果我将AppTestCfggetSource的签名更改如下,则使用AppTestCfg创建DataSourceDataSourceHandler

@Bean
public DataSource getSource(DataSourceProps props){
    return null;
}

为什么不利用Spring Boot的
@MockBean
注释:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppTestCfg.class)
@EnableConfigurationProperties({DataSourceProps.class})
public class AppTest {

    @MockBean
    private DataSource dataSourceStub;
}

这将替换应用程序上下文中该接口的任何bean,并将它们替换为mock。

这是因为bean的对象类型相同

如果您想要两个相同类型的bean,那么必须指定不同的命名bean。尝试明确新bean的名称:

@Configuration
public class AppTestCfg extends AppCfg {
    @Bean(name="secondDataSourceHandler")
    public DataSourceHandler getMockDataSourceHandler(){
        return new MockDataSourceHandler();
    }
    @Bean
    public DataSource getSource(){
        return null;
    }
}

您好,@Maciej Kowalski用
@MockBean public-DataSourceHandler getDataSourceHandler=new-MockDataSourceHandler()替换了@Bean但出现错误
java.lang.IllegalStateException:未能加载ApplicationContext
<代码>原因:org.springframework.beans.factory.BeanCreationException:创建名为“appTestCfg”的bean时出错:合并bean定义的后期处理失败;嵌套的异常是java.lang.NoClassDefFoundError:org/mockito/Answers
<代码>由以下原因引起:java.lang.NoClassDefFoundError:org/mockito/Answers您的类路径中需要mockito核心我收到此错误
mockito无法模拟此类:interface javax.sql.DataSource您好,@Kieveli我想用模拟对象替换数据源