Java 模拟默认Maven故障保护配置的简单现代Gradle配置
配置Gradle的一种简单(但现代最佳实践)方法是什么,这样我就可以运行与默认操作类似的集成测试?我读过,特别是,但它们看起来相当复杂(与Maven Failsafe相比),而且我不相信这些例子以同样的方式工作 我想要的是非常简单的:Java 模拟默认Maven故障保护配置的简单现代Gradle配置,java,maven,gradle,integration-testing,Java,Maven,Gradle,Integration Testing,配置Gradle的一种简单(但现代最佳实践)方法是什么,这样我就可以运行与默认操作类似的集成测试?我读过,特别是,但它们看起来相当复杂(与Maven Failsafe相比),而且我不相信这些例子以同样的方式工作 我想要的是非常简单的: 为了便于讨论,将有一些单独的任务,我们称之为integrationTest 调用gradle test时,integrationTest任务不会运行 调用gradle integrationTest时,integrationTest任务将运行(在test任务之后
- 为了便于讨论,将有一些单独的任务,我们称之为
integrationTest
- 调用
时,gradle test
任务不会运行integrationTest
- 调用
时,gradle integrationTest
任务将运行(在integrationTest
任务之后)test
- 调用
时,gradle check
任务将运行(在integrationTest
任务之后)test
任务与integrationTest
任务具有相同的依赖项和类路径配置test
任务将使用与integrationTest
任务相同的源路径(即test
),但将只运行以src/test/java
结尾的测试(为了简化本讨论的过程)*IT
任务将忽略以test
结尾的所有测试*IT
tasks {
test {
filter {
excludeTestsMatching("IT*")
excludeTestsMatching("*IT")
excludeTestsMatching("*ITCase")
}
}
register("integrationTest", Test::class) {
description = "Runs integration tests."
group = "verification"
testClassesDirs = sourceSets.test.get().output.classesDirs
classpath = sourceSets.test.get().runtimeClasspath
filter {
includeTestsMatching("IT*")
includeTestsMatching("*IT")
includeTestsMatching("*ITCase")
}
shouldRunAfter(test)
}
}
这看起来很有希望,谢谢!如果成功的话,我会安排一笔赏金来表达我的感激之情。1.你能谈谈
注册(“integrationTest”,Test::class)
与官方文件推荐的任务集成测试(type:Test)
的区别吗?2.使用shouldlrunafter(test)
会保证失败的测试会在check
任务结束前使构建失败,还是会在check
任务结束后逐步安排集成测试?(文档建议添加check.dependsOn integrationTest
)。3.verification
是其他任务使用的官方、有文档记录的组吗?(1)我使用的是Kotlin DSL,而不是Groovy DSL,因此语法不同。通常,您应该支持任务配置避免API(惰性API)。(2) 否,如果您想因任何测试失败而立即使生成失败,请将failFast
属性设置为true
。不要将文档作为唯一的解决方案,将其用作参考,并根据您的需要进行调整。有关dependsOn
vsshouldlrunafter
的详细信息,请参阅DefaultTask
的javadocs。(3) 组是一个任意字符串值,尽管插件作者通常会重用现有组。LifecycleBasePlugin
定义验证。就我而言,我别无选择,只能使用Groovy DSL。我还不完全清楚寄存器(“integrationTest”,Test::class)
是如何工作的,以及它是否等同于任务integrationTest(type:Test)
。有没有可能你可以澄清一下,甚至可以展示Groovy DSL的一部分?啊,看起来Gradle对你提到的“避免配置”这件事有一个看法。我会去读它,看看它是否回答了我的问题。这是如何翻译成Groovy的,我需要一段时间才能弄清楚。问题的关键是如何以一种简单的方式配置它,但是看起来我仍然需要研究在哪里设置failFast
,在Groovy中在哪里调用register()
,等等。所以它仍然不简单。我会继续研究,但我希望能在Groovy中看到完整的答案。
tasks {
test {
filter {
excludeTestsMatching("IT*")
excludeTestsMatching("*IT")
excludeTestsMatching("*ITCase")
}
}
register("integrationTest", Test::class) {
description = "Runs integration tests."
group = "verification"
testClassesDirs = sourceSets.test.get().output.classesDirs
classpath = sourceSets.test.get().runtimeClasspath
filter {
includeTestsMatching("IT*")
includeTestsMatching("*IT")
includeTestsMatching("*ITCase")
}
shouldRunAfter(test)
}
}