在Spring Boot应用程序中运行JUnit单元测试而不提供数据源

时间:2016-06-10 20:04:01

标签: spring jpa junit spring-boot mockito

我正在尝试构建一个Spring Boot应用程序,试图坚持测试驱动开发。我的问题是我的项目中包含Spring Boot JPA,但实际上还没有设置数据源。在添加依赖项之前,我能够成功运行单元测试。

现在我已经添加了依赖项,即使尝试执行单元测试也会失败,因为它无法初始化Spring Data的数据源。

我是JUnit,Spring Boot和Mockito的新手。我希望能够在没有实际数据源的情况下运行我的单元测试,而是模拟我的所有存储库。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:6)

如果定义一些常用于测试的SQL引擎(例如HSQL,Derby或H2),Spring Boot应该将其识别为测试依赖项并在其上配置Datasource bean。为此,只需使用测试范围定义此类引擎:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>test</scope>
</dependency>

当您引入生产数据源(例如Postgres或MySQL)时会出现问题。在那个州你需要

  • 使用@Primary annotation
  • 显式配置测试数据源
  • 或提供测试配置文件(例如src/test/resources/application.properties),其中将配置H2。

答案 1 :(得分:5)

第一步。添加到pom.xml某种内存数据库。例如h2

<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <version>1.4.191</version>
  <scope>test</scope>
</dependency>

然后在位于(application.properties)的测试src/test/resources中配置测试数据源:

spring.jpa.generate-ddl=false
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect

spring.datasource.platform=h2
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:test;MODE=MySQL;IGNORECASE=TRUE
spring.datasource.username=SA
spring.datasource.password=

这只是使用h2支持模式运行mysql内存的示例。但您可以使用其他模式(sql support),甚至根本不设置此参数。