我面临一个无法解决的问题。 我的应用程序有以下代码结构。
src
- main
- java
- test
- java
- groovy
这是相当传统的。有些测试是在java中用JUnit5写的,有些是在groovy中用Spock写的。gradlew test
只在 /src/test/groovy
是运行。没有错误。Java测试根本没有运行。我特意给srctestjava添加了一个失败的测试,以检查是否有打印报告的问题,测试没有失败,因为整个包srctestjava被忽略了。测试没有失败,因为整个包中的srctestjava不知为何被忽略了。我试图在SO上找到解决方案,但没有一个答案能帮助我。
sourceSets {
test {
java { srcDirs = "src/test/java" }
groovy { srcDirs = "src/test/groovy" }
}
}
这是一些我的build.gradle中的片段。
插件。
apply plugin: 'groovy'
测试依赖性。
testImplementation("org.springframework.boot:spring-boot-starter-test:2.1.4.RELEASE") {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
testImplementation("org.junit.jupiter:junit-jupiter:5.5.2")
testImplementation(group: 'org.spockframework', name: 'spock-core', version: '1.3-groovy-2.5')
testImplementation(group: 'org.spockframework', name: 'spock-spring', version: '1.3-groovy-2.5')
testImplementation(group: 'org.codehaus.groovy', name: 'groovy-all', version: '1.3-groovy-2.5', ext: 'pom')
测试任务配置:
test {
useJUnit()
failFast = true
testLogging.showStandardStreams = true
reports {
junitXml.enabled = true
}
finalizedBy jacocoTestReport
finalizedBy jacocoTestCoverageVerification
finalizedBy check
testLogging {
events "PASSED", "STARTED", "FAILED", "SKIPPED"
}
}
你有什么想法吗?
好吧,我解决了这个问题,紧接着我又遇到了另一个问题。我把这个答案贴出来,以备将来我或一些同道中人的麻烦。
首先,我必须按照Mike Hill的建议,把useJUnit()改成useJUnitPlatform()。
这样就解决了第一个java测试不能运行的问题。新的问题出现了--junit测试运行极慢,有些测试随机卡住了。每当我运行测试时,其中一个测试就会卡住,并保持这种状态几分钟。在那之后,OutOfMemory被抛出,我不知道为什么。当我在IJ上运行这些测试时,一切都很顺畅。
测试依赖关系。
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine'
同时在测试关闭中添加这个。
test {
useJUnitPlatform() {
includeEngines 'junit-vintage'
includeEngines 'junit-jupiter'
}
}
我并没有说这是正确的解决方案。更多的是在翻阅文档后的猜测。在没有进一步阅读useJUnit()和useJUnitPlatform()的区别之前,我不建议复制它。对我来说,它做到了,我没有更多的时间做研究。