我的应用程序(EngineConfig.java
中有此配置:
@Component
@EnableAutoConfiguration
@EnableCaching
@EnableScheduling
@ComponentScan(basePackages = "com.exaple.package")
public class EngineConfig {
}
在程序包中,我有程序包components
,其中包含一些bean标记注释@Component
:
所以,我进行了一些测试:
@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的创建。
答案 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