java - 在测试中排除一些bean

标签 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 不创建一些未找到 Autowiring 候选的 bean?因此,我收到这样的错误:

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

但是在这个测试中我不需要使用基础,所以我想排除一些 beans 的创建。

最佳答案

您应该使用 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。

关于java - 在测试中排除一些bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57037311/

相关文章:

java - 如何在 Java、Spring 和 Apache Camel 中定义 <beans> url

java - 无法通过 servlet.xml 设置 session 工厂

spring - 如何为 Spring Boot/MVC 资源设置可识别的内容/MIME 类型?

spring-boot - 如何使用 Spring Sleuth 2.0 记录 MDC?

java - 找不到符号 : parseInt

java - 为什么不强制执行 Java 命名约定?

java - 上下文菜单与 TabHost 问题

java - 从控制台接受数据并将其存储在字符串中不同数据类型的变量中

java.lang.ClassNotFoundException : javax. 持久性.EntityManagerFactory

java - 如何创建跨服务域模型映射?