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

时间:2017-02-06 10:02:10

标签: java spring hibernate spring-boot spring-data-jpa

我想配置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);
    }
}

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

不幸的是我的test 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。

2 个答案:

答案 0 :(得分:0)

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

Spring Boot API - SpringBootApplication

答案 1 :(得分:0)

我在版本2.0.9.RELEASE中遇到此问题,必须使用它来遵守我的公司标准。对我有用的是:

@SpringBootTest(properties="spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration")

我无法确定这是否是我的Springboot版本中@EnableAutoConfiguration的问题,但是对于2.1.5.RELEASE版本,我不必通过@SpringBootTest设置该属性即可使此工作正常。