使用Junit5进行Gradle多项目集成测试
如何在多项目构建文件中使用Gradle 5.2和JUnit 5.3创建集成测试 这是我当前的生成文件:使用Junit5进行Gradle多项目集成测试,gradle,continuous-integration,integration-testing,junit5,continuous-delivery,Gradle,Continuous Integration,Integration Testing,Junit5,Continuous Delivery,如何在多项目构建文件中使用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" c
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
}
}
}
我在第46行应用的集成测试.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]
}
}
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类类似
我曾尝试在itest
任务中直接添加useuseJUnitPlatform()
,但没有成功。我还尝试将所有内容都放入build.gradle
文件中,但没有成功
最后,我希望使用相同的模式来定义负载和安全测试,将它们作为CI/CD管道的一部分单独运行,因此将所有内容整齐地放在各自项目下的各自目录中,而不是将所有内容混合在一个测试目录中并使用标记
这也有助于其他团队对CI/CD实践进行建模,因此最好按照设计使用Gradle 5和JUnit 5,而不是采用变通方法或黑客方法来实现。可以接受的是,这些版本不能一起工作,或者目前存在缺陷\问题,阻止了这种方法。希望这不是问题所在,我只是缺少了一些简单的东西。解决方案是我自己需要包含JUnit 5依赖项。以下是正确的
集成测试.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 }
}