【问题标题】:Run JUnit unit tests in Spring Boot application without providing datasource在 Spring Boot 应用程序中运行 JUnit 单元测试而不提供数据源
【发布时间】:2016-10-11 21:36:12
【问题描述】:

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

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

不过,我对 JUnit、Spring Boot 和 Mockito 还是很陌生。我希望能够在没有实际数据源的情况下运行我的单元测试,而是模拟我所有的存储库。

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

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。请参阅“如何提问”页面以获得澄清此问题的帮助。
  • 此链接可能对您有用:stackoverflow.com/questions/34756264/…
  • 为测试套件创建一个单独的配置文件并禁用 JPA 的自动配置。
  • 您还可以使用MockitoRunner 而不是 Spring Runner 执行一些测试(控制器、服务)。这不会实例化整个上下文,而只是将依赖项作为 Mocks 注入。这也有助于加快测试速度。我们通常只使用 SpringRunner 进行集成测试。

标签: spring jpa junit spring-boot mockito


【解决方案1】:

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

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

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

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=

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

【讨论】:

    【解决方案2】:

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

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

    当您引入生产数据源(例如 Postgres 或 MySQL)时会出现问题。在那种状态下,您需要

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

    【讨论】:

      猜你喜欢
      • 2017-01-30
      • 2020-07-09
      • 2017-02-20
      • 2018-09-08
      • 2018-07-22
      • 2021-06-17
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      相关资源
      最近更新 更多