如何使用 Gradle 运行 JUnit 测试?

目前我有以下 建造,分级文件:

apply plugin: 'java'


sourceSets {
main {
java {
srcDir 'src/model'
}
}
}


dependencies {
compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
runtime fileTree(dir: 'libs', include: '*.jar')
}


这个 建造,分级文件适用于我的存储库 这里。我的所有主要文件都在 Src/model/中,它们各自的测试在 测试/模型中。

如何正确地添加 JUnit4依赖性,然后在 测试/模型的文件夹中运行这些测试?

224846 次浏览

如何正确地添加 junit4依赖项?

假设你正在解决一个标准的 Maven (或者等价的)回购协议:

dependencies {
...
testCompile "junit:junit:4.11"  // Or whatever version
}

在测试/模型的文件夹中运行这些测试?

您用相同的方式定义测试源集:

sourceSets {
...


test {
java {
srcDirs = ["test/model"]  // Note @Peter's comment below
}
}
}

然后按以下方式调用测试:

./gradlew test

编辑: 如果您使用的是 JUnit5,那么还有更多的步骤需要完成,您应该遵循 本教程

如果你使用默认的分级包结构来设置你的项目,比如:

src/main/java
src/main/resources
src/test/java
src/test/resources

那么您就不需要修改 source 集来运行您的测试。Gradle 会发现你的测试类和资源都在 src/test 中。然后你就可以像奥利弗上面说的那样跑了。需要注意的一点是: 在设置属性文件和使用 gradle 和 IDE 运行测试类时要小心。我使用 Eclipse,当从它运行 JUnit 时,Eclipse 选择一个类路径(bin 目录) ,而 gradle 选择另一个类路径(build 目录)。如果您编辑资源文件,并且在测试运行时没有看到您的更改反映出来,那么这可能会导致混淆。

如果您使用 Spring Initializr创建了您的项目,那么所有的配置都应该正确,您所需要做的就是运行..。

./gradlew clean test --info
  • 如果要查看测试输出,请使用 --info
  • 如果要重新运行自上次更改以来已经通过的测试,请使用 clean

在 SpringBoot 中测试所需的 build.gradle依赖项..。

dependencies {
compile('org.springframework.boot:spring-boot-starter')
testCompile('org.springframework.boot:spring-boot-starter-test')
}

由于某些原因,测试运行程序没有告诉您这一点,但是它在 build/reports/tests/test/index.html中生成了一个 HTML 报告。

TestCompile 不被推荐:

dependencies {
...
testImplementation 'junit:junit:4.13'
}

如果你使用默认的文件夹结构(src/test/java/...) ,测试部分很简单:

test {
useJUnit()
}

最后:

gradlew clean test

Alos see: https://docs.gradle.org/current/userguide/java_testing.html

如果您想在一个模块中添加一个 source Set,以便在所有现有的 source Set 之外进行测试,而不管活动风格如何:

sourceSets {
test {
java.srcDirs += [
'src/customDir/test/kotlin'
]
print(java.srcDirs)   // Clean
}
}

注意操作符 +=,如果要运行集成测试,请将 test更改为 androidTest

GL

这是针对 Kotlin DSL(build.gradle.kts)和使用 JUnit 5(JUnit 平台)的:

tasks.test {
// Discover and execute JUnit4-based tests
useJUnit()


// Discover and execute TestNG-based tests
useTestNG()


// Discover and execute JUnit Platform-based (JUnit 5, JUnit Jupiter) tests
// Note that JUnit 5 has the ability to execute JUnit 4 tests as well
useJUnitPlatform()
}


dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:5.8.2")
// ...
}