gradle - 使用 Gradle 对 JUnit 测试进行分组

标签 gradle junit

我创建了一个新的 Groovy 集成测试项目,并希望能够将不同组件的测试分组在一起。例如,某些测试仅对 docker 镜像有效,而其他测试则用于测试本地运行的 Web 应用程序。我还希望获得测试结果的报告,并且能够在需要时反复运行测试。

最佳答案

在 JUnit 中对测试进行分组的第一步是创建一个接口(interface)来命名该组。在您的测试类可以访问的包中创建它。

如果您的测试类如下所示:

package com.example.test.api.get.cert

class ByIssuedBeforeTest {
  //awesome tests
}

然后创建一个空接口(interface),如下所示:

package com.example.test

interface DockerTest {}

现在将您的测试类更改为如下所示:

package com.example.test.api.get.cert

import org.junit.experimental.categories.Category

@Category(DockerTest.class)
class ByIssuedBeforeTest {
  //awesome tests
}

您还可以注释单个测试而不是整个类。

现在在你的 build.gradle 文件中:

apply plugin: 'java'

sourceSets {
    main {
        java {
            srcDirs = ["src/main/java", "src/main/groovy"]
        }
    }
    test {
        java {
            srcDirs = ["src/test/java", "src/test/groovy"]
        }
    }
}

test {
    outputs.upToDateWhen { false }
    reports {
        junitXml.enabled=true
        html.enabled=true
    }
}

task nondockerTest(type: Test) {
    outputs.upToDateWhen { false }
    useJUnit {
        excludeCategories 'com.example.test.DockerTest'
    }
}

task dockerTest(type: Test) {
    outputs.upToDateWhen { false }
    useJUnit {
        includeCategories 'com.example.test.DockerTest'
    }
}

gradle 的 java 插件为您提供测试任务。在测试任务中,我们添加了 outputs 行,以防止测试任务被标记为“UP-TO-DATE”,本质上是强制 gradle 在我们调用任务时始终运行该任务缓存结果。

报告 block 允许创建 JUnit 报告文件。它们将被放置在 build/reports/tests 目录中。如果您运行nonDockerTest,它将是build/reports/tests/nondockerTest/index.html。

useJUnit block 告诉 Gradle 使用 JUnit 来运行测试以及运行哪个类别的测试(如果使用 includeCategories)或不运行哪个类别的测试(如果使用 exceptCategories)。

gradle test 运行所有测试。

gradle nondockerTest 运行未标记为 DockerTest 类别的测试。

gradle dockerTest 仅运行标有 DockerTest 类别的测试。

每个任务都会在 /build/reports/tests 目录中创建报告。

关于gradle - 使用 Gradle 对 JUnit 测试进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42305453/

相关文章:

android - 错误:无法解决:com.android.support:appcompat-v7:25.1.0

java - 如何在 TestNG 中禁用整个单元测试?

Java 保龄球程序 - 添加第 10 帧

java - Gradle:在项目中找不到路径的任务

java - CalendarFX 结合 JavaFX : Module javafx. 未找到控件

gradle - Spring-boot 依赖项不适用于 gradle

java - 多个 Maven 模块来分离测试、API 和实现

java - Robotium断言失败

java - 如何防止创建模拟对象来运行静态初始化?

android - 无法解析从本地源模块构建的本地 AAR