# JUnit5 和 Gradle 

> 原文： [https://howtodoinjava.com/junit5/junit-5-gradle-dependency-build-gradle-example/](https://howtodoinjava.com/junit5/junit-5-gradle-dependency-build-gradle-example/)

了解**使用 gradle** 配置它的不同模块，以及如何使用它们来创建和执行测试。

请注意，JUnit5 在运行时需要 Java8。

## 1\. JUnit5 Gradle 依赖项

要通过 gradle 运行 JUnit5 测试，您将至少需要两个依赖项。

1.  #### JUnit Jupiter 引擎依赖项

    JUnit jupiter 必须具有两个依赖项，即`junit-jupiter-api`和`junit-jupiter-engine`。 `junit-jupiter-api`具有 junit 注解（例如`@Test`）以编写测试和扩展名，`junit-jupiter-engine`具有测试引擎实现，在运行时需要执行该引擎才能执行测试。

    在内部，`junit-jupiter-engine`依赖于`junit-jupiter-api`，因此添加`junit-jupiter-engine`仅将两个依赖项都带入类路径。

    我们可以在此[图像](http://junit.org/junit5/docs/current/user-guide/images/component-diagram.svg)中了解各种 junit jar 之间的**内部依赖项**。

    ```java
    dependencies {
    	testRuntime("org.junit.jupiter:junit-jupiter-engine:5.5.2")
            testRuntime("org.junit.platform:junit-platform-runner:1.5.2")
    }
    test {
        useJUnitPlatform()
    }

    ```

2.  #### JUnit 平台运行器依赖项

    我们需要`junit-platform-runner`用于**在 JUnit4 环境**中的 JUnit 平台上执行测试和测试套件。

    在内部，`junit-platform-runner`依赖于`junit-platform-suite-api`和`junit-platform-launcher`，因此添加`junit-jupiter-engine`仅将所有三个依赖项引入类路径中。

    ```java
    testRuntime("org.junit.platform:junit-platform-runner:1.5.2")
    ```

## 2\. 使用 JUnit5 执行 JUnit4 测试

要在 JUnit5 环境中执行 **JUnit4 测试**，您将需要包括`junit-vintage-engine`依赖项。 JUnit Vintage 提供了`TestEngine`，用于在平台上运行基于 JUnit 3 和 JUnit4 的测试。

```java
dependencies {
    //To run JUnit 3 and JUnit4 tests
    testCompile("junit:junit:4.12")
    testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4")
}

```

通过在`build.gradle`中进行上述配置，现在您可以使用 JUnit5 运行旧的 junit 3 或 JUnit4 测试。

## 3\. JUnit5 Gradle 示例

用于运行用 JUnit5 构建的测试的示例`build.gradle`文件如下：

```java
buildscript {
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.2'
	}
}

repositories {
	mavenCentral()
}

ext.junit4Version        = '4.12'
ext.junitVintageVersion  = '4.12.2'
ext.junitPlatformVersion = '1.0.2'
ext.junitJupiterVersion  = '5.0.2'
ext.log4jVersion         = '2.9.0'

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.junit.platform.gradle.plugin'

jar {
	baseName = 'junit5-gradle-consumer'
	version = '1.0.0-SNAPSHOT'
}

compileTestJava {
	sourceCompatibility = 1.8
	targetCompatibility = 1.8
	options.compilerArgs += '-parameters'
}

junitPlatform {
	// platformVersion '1.0.2'
	filters {
		engines {
			// include 'junit-jupiter', 'junit-vintage'
			// exclude 'custom-engine'
		}
		tags {
			// include 'fast'
			exclude 'slow'
		}
		// includeClassNamePattern '.*Test'
	}
	// configurationParameter 'junit.jupiter.conditions.deactivate', '*'
	// enableStandardTestTask true
	// reportsDir file('build/test-results/junit-platform') // this is the default
	logManager 'org.apache.logging.log4j.jul.LogManager'
}

dependencies {
	// JUnit Jupiter API and TestEngine implementation
	testCompile("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")
	testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")

	// If you also want to support JUnit 3 and JUnit4 tests
	testCompile("junit:junit:${junit4Version}")
	testRuntime("org.junit.vintage:junit-vintage-engine:${junitVintageVersion}")

	// To avoid compiler warnings about @API annotations in JUnit code
	testCompileOnly('org.apiguardian:apiguardian-api:1.0.0')

	// To use Log4J's LogManager
	testRuntime("org.apache.logging.log4j:log4j-core:${log4jVersion}")
	testRuntime("org.apache.logging.log4j:log4j-jul:${log4jVersion}")

	// Only needed to run tests in an (IntelliJ) IDE(A) that bundles an older version
	testRuntime("org.junit.platform:junit-platform-launcher:${junitPlatformVersion}")
}

task wrapper(type: Wrapper) {
	description = 'Generates gradlew[.bat] scripts'
	gradleVersion = '4.3.1'
}

```

参考： [Git](https://github.com/ryuest/junit5-samples/blob/master/junit5-gradle-consumer/build.gradle)

将我的问题放在评论部分。

学习愉快！