Spring未注入测试bean
在SpringBoot测试中,DataSourceHandler在AppTestCfg中创建,而DataSource在AppCfg中创建。为什么它们不都在AppTestCfg中创建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
@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
}
如果我将AppTestCfg中getSource的签名更改如下,则使用AppTestCfg创建DataSource和DataSourceHandler
@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我想用模拟对象替换数据源