SpringBoot 单元测试不使用来自 Application 类的 @EnableAutoConfiguration 注解

Ger*_*not 7 java spring hibernate spring-data-jpa spring-boot

我想配置一个 Spring Boot 应用程序,以便根本不使用数据库。所以我注释了我的 Application 类以排除 JPA 自动配置类:

@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class Application {

    public static void main(final String... args) {
        run(Application.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

当服务独立运行时,这工作正常

不幸的是,我的测试类似乎忽略了注释,尽管我使用 Application 类进行测试

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SwaggerJsonExistenceTest {
    ...
}
Run Code Online (Sandbox Code Playgroud)

测试失败并显示以下错误消息

引起:org.springframework.beans.factory.BeanCreationException:创建名为“dataSource”的bean时出错:调用init方法失败;嵌套异常是 java.lang.IllegalStateException:无法确定用于测试的嵌入式数据库。如果您想要一个嵌入式数据库,请在类路径上放置一个受支持的数据库。

更新:类路径上没有数据库驱动程序。

org.springframework.boot:spring-boot-starter-data-jpa 用于测试(通过 gradle 中的 testCompile 指令包含)

如何配置测试以使其不使用与数据库相关的自动配置?

修复:我已经删除了所有 jpa starter 依赖项(因为不需要 DB),所以根本没有完成数据源自动配置。

小智 0

@SpringBootApplication注释有一个排除属性,在这种情况下您应该使用该属性@EnableAutoConfiguration(exclude = ...)。如果您使用它,@SpringBootTest带注释的测试应该正确执行排除。

Spring Boot API - SpringBootApplication