gpt4 book ai didi

使用 Junit5 进行 Gradle 多项目集成测试

转载 作者:行者123 更新时间:2023-12-02 00:54:31 29 4
gpt4 key购买 nike

如何在多项目构建文件中使用 Gradle 5.2 和 JUnit 5.3 创建集成测试?

这是我当前的构建文件:

buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:1.6.10"
classpath 'org.owasp:dependency-check-gradle:5.0.0-M2'
}
}


allprojects {
defaultTasks 'clean', 'build', 'publish', 'installDist'
group = 'coyote'
version = '0.1.0'
}

subprojects {

apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: "com.github.spotbugs"
apply plugin: 'org.owasp.dependencycheck'
apply plugin: 'maven-publish'
apply plugin: 'application'
apply plugin: 'eclipse'
apply plugin: 'idea'

repositories {
jcenter()
mavenCentral()
}

dependencies {
testImplementation ("org.junit.jupiter:junit-jupiter-api:5.3.2")
testRuntimeOnly ("org.junit.jupiter:junit-jupiter-engine:5.3.2")
spotbugsPlugins ("com.h3xstream.findsecbugs:findsecbugs-plugin:1.8.0")
}

tasks.withType(Test) {
useJUnitPlatform()
}

apply from: "$rootDir/integration-test.gradle"

check.dependsOn jacocoTestCoverageVerification
check.dependsOn dependencyCheckAnalyze

spotbugs {
effort = "max"
reportLevel = "low"
ignoreFailures = true
showProgress = true
}

jacocoTestReport {
reports {
xml.enabled true
html.enabled true
}
}

check.dependsOn jacocoTestReport

tasks.withType(com.github.spotbugs.SpotBugsTask) {
reports {
xml.enabled false
html.enabled true
}
}

}
integration-test.gradle我在第 46 行申请的文件包含以下内容:
sourceSets {
itest {
compileClasspath += sourceSets.main.output + configurations.testCompile
runtimeClasspath += output + compileClasspath + configurations.testRuntime
}
}

idea {
module {
testSourceDirs += sourceSets.itest.java.srcDirs
testResourceDirs += sourceSets.itest.resources.srcDirs
scopes.TEST.plus += [configurations.itestCompile]
}
}

task itest(type: Test) {
description = 'Runs the integration tests.'
group = 'verification'
testClassesDirs = sourceSets.itest.output.classesDirs
classpath = sourceSets.itest.runtimeClasspath
outputs.upToDateWhen { false }
}

Intellij 中的一切似乎都运行良好,但 JUnit5 并未添加到类路径中,因此 itest 中的任何测试目录找不到 JUnit 库。

运行 gradlew itest失败,结果与未找到 JUnit 类的结果相似。

我尝试添加使用 useJUnitPlatform()直接在 itest任务,但没有成功。我也试过把所有东西都放在 build.gradle 中文件没有成功。

最终,我想使用相同的模式来定义负载和安全测试,将它们作为 CI/CD 管道的一部分单独运行,因此将所有内容整齐地放在各自项目下的自己的目录中,而不是将所有内容混合在一个测试目录中并使用标签。

这也有助于其他团队对 CI/CD 实践进行建模,因此首选使用 Gradle 5 和 JUnit 5,而不是使用变通方法或 hack 来使事情发挥作用。了解到这些版本不能一起工作或者当前存在阻止这种方法的缺陷\问题是可以接受的。希望这不是问题,我只是缺少一些简单的东西。

最佳答案

解决方案是我需要自己包含 JUnit 5 依赖项。以下是正确的integration-test.gradle文件:

sourceSets {
itest {
compileClasspath += sourceSets.main.output + configurations.testCompile
runtimeClasspath += output + compileClasspath + configurations.testRuntime
}
}

idea {
module {
testSourceDirs += sourceSets.itest.java.srcDirs
testResourceDirs += sourceSets.itest.resources.srcDirs
scopes.TEST.plus += [configurations.itestCompile]
}
}

dependencies {
itestImplementation ("org.junit.jupiter:junit-jupiter-api:5.3.2")
itestRuntimeOnly ("org.junit.jupiter:junit-jupiter-engine:5.3.2")
}

task itest(type: Test) {
description = 'Runs the integration tests.'
group = 'verification'
testClassesDirs = sourceSets.itest.output.classesDirs
classpath = sourceSets.itest.runtimeClasspath
outputs.upToDateWhen { false }
}

关于使用 Junit5 进行 Gradle 多项目集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55402064/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com