排除测试中的某些豆

时间:2019-07-15 09:55:17

标签: java spring spring-boot testing

我的应用程序(EngineConfig.java中有此配置:

@Component
@EnableAutoConfiguration
@EnableCaching
@EnableScheduling
@ComponentScan(basePackages = "com.exaple.package")
public class EngineConfig {

}

在程序包中,我有程序包components,其中包含一些bean标记注释@Component

enter image description here

所以,我进行了一些测试:

@ContextConfiguration(classes = [
    EngineConfig::class
])
@RunWith(SpringRunner::class)
class EngineTest {

    @Test
    fun factorial() {
        //some test
    }
}

问题在于,components文件夹中的某些bean需要数据源,但是在此测试中,我不需要使用数据库,因此不会创建数据源。是否可以在测试中指定Spring不创建某些未找到自动装配候选对象的bean?因此,我收到这样的错误:

Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]

但是在此测试中,我不需要使用基础,因此我想排除一些bean的创建。

2 个答案:

答案 0 :(得分:0)

您应该使用Spring配置文件。在配置文件中将数据源定义为Bean:

@Configuration
public class EngineConfig {
    @Bean
    @Profile("!test")
    public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        // define it here
        return dataSource;
    }
}

然后在您的测试中使用此注释来使用测试配置文件:

@RunWith(SpringRunner.class)
@ActiveProfiles("test")
class EngineTest {

}

这样,它将不会定义数据源bean。

答案 1 :(得分:0)

在您的“测试”课程中尝试

@ContextConfiguration(classes = [
EngineConfig::class
])
@RunWith(SpringRunner::class)
**@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, 
DataSourceTransactionManagerAutoConfiguration.class, 
HibernateJpaAutoConfiguration.class})**
class EngineTest {

@Test
fun factorial() {
    //some test
}
}

或者您也可以在application-test.properties中添加此属性

spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration