首页 文章

SpringBoot单元测试不使用Application类中的@EnableAutoConfiguration批注

提问于
浏览
3

我想配置一个Spring Boot应用程序,以便根本不使用DB . 所以我已经注释了我的Application类来排除JPA autoconfig类:

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

    public static void main(final String... args) {
        run(Application.class, args);
    }
}

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

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

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

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

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

更新:类路径上没有DB驱动程序 .

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

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

修复:我已经删除了所有jpa启动程序依赖项(因为不需要DB),因此根本没有完成数据源autoconfig .

1 回答

  • 0

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

    Spring Boot API - SpringBootApplication

相关问题