构建逻辑单元测试 (TestKit)
当你编写了一个复杂的自定义任务或插件时,如何确保它在未来的 Gradle 版本中依然可用?答案是:编写构建测试。
1. 什么是 TestKit?
TestKit 允许你启动一个“虚拟”的 Gradle 实例,在一个临时的临时目录下运行真实的构建,并断言其输出是否符合预期。
2. 编写测试案例
使用 JUnit + GradleRunner。
kotlin
class MyPluginTest {
@Test
fun `test my custom task`() {
// 1. 在临时目录创建假的 build.gradle
val projectDir = File("build/test-project")
projectDir.mkdirs()
File(projectDir, "build.gradle.kts").writeText("""
plugins { id("com.virogu.my-plugin") }
""")
// 2. 启动 GradleRunner 运行任务
val result = GradleRunner.create()
.withProjectDir(projectDir)
.withArguments("myCustomTask")
.withPluginClasspath()
.build()
// 3. 断言输出
assertTrue(result.output.contains("Task Success!"))
assertEquals(TaskOutcome.SUCCESS, result.task(":myCustomTask")?.outcome)
}
}3. 为什么专家坚持写 TestKit?
- 回归测试: 升级 Gradle 或 AGP 版本时,能立刻发现插件是否坏了。
- 多版本测试: 可以同时测试你的插件在 Gradle 7.x 和 8.x 下的表现。