Skip to content

构建逻辑单元测试 (TestKit)

源:使用 Gradle 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 下的表现。