java - 在 spring boot 应用程序中分离集成测试

标签 java spring gradle integration-testing

我正在为 SpringBoot 应用程序编写测试。 我想将集成测试与单元测试分开。 现在我的项目结构看起来像这样:

├── Demo
│   ├── src
│   │   ├── main
|   |   |   └──java
│   │   ├── test
|   |   |   └──java

有没有办法添加这样的模块:

├── Demo
│   ├── src
│   │   ├── main
|   |   |   └──java
│   │   ├── integrationTest
|   |   |   └──java
│   │   ├── test
|   |   |   └──java

我希望新的 integrationTest 模块能像测试模块一样工作,但我不知道如何配置它。我设法将它添加为模块,将 integrationTest/java 目录标记为测试源根并在其中运行测试,但@SpringBootTest 无法解析 ApplicationContext,并且我的所有 bean 始终为空。

当我在测试模块中编写相同的测试时,它工作正常。

有没有办法做到这一点? 这是分离集成测试的正确方法吗? 如果不是,最佳做法是什么?

我在 intelliJ 工作,我使用 gradle 作为包管理器。

最佳答案

您可以将它们与其余测试一起使用;应用 约定 和标签匹配来过滤掉它们,比如将 IntegrationTest 附加到类名并为 JUnit @ 使用相同的值标记... 然后定义/声明一些 Gradle 任务来执行它们:

test {
  useJUnitPlatform()
}

task integrationTests(type: Test) {
  filter { includes = ["IntegrationTest"] }
  useJUnitPlatform()
}

task unitTests(type: Test) {
  filter { includes = ["UnitTest"] }
  useJUnitPlatform()
}

完整示例:

package tld.domain.support;

public final class Category {
  public static final INTEGRATION_TEST = "IntegrationTest";

  public static final UNIT_TEST = "UnitTest";
}
import tld.domain.support.Category;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Tag(Category.INTEGRATION_TEST)
final class MyIntegrationTest {
  @Test
  void testFoo() {
    // ...
  }

关于java - 在 spring boot 应用程序中分离集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61510925/

相关文章:

java - 已签名的 Apk 不断崩溃

java - 使用 Hibernate Validator 在错误消息中包含字段值

java - AdMob 横幅出现在大屏幕 Android 设备屏幕中央

java - 我无法将 String 放在字符串数组的第一个位置

java - 如何使用 Spring MVC 对我的 API 进行版本控制?

java - 当我只想使用 RestTemplate 时如何防止在 Spring Boot 中自动启动 tomcat/jetty

android - Android Studio:无法同步Gradle项目

java - 如何对有两个公共(public)方法,一个调用另一个的情况进行单元测试?

spring - JTATransactionManager 未提交到数据库

selenium - 从 Jenkins 运行脚本时获取 "Timeout"和 "Unable to locate element"