You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Gradle 插桩测试监听器配置问题

Android Gradle 插桩测试监听器配置问题

嘿,各位搞Android开发的朋友,我最近碰到个Gradle配置的小坑,想跟大家唠唠也求个解决思路:

我本来想给项目里src/androidTest目录下的插桩测试加个测试监听器,于是在build.gradle里写了这段配置:

println("###############")
tasks.withType<Test>().configureEach {
    addTestListener(object : TestListener {
        override fun afterTest(testDescriptor: TestDescriptor, result: TestR
        // 这里代码没贴全,本来还有其他接口方法的实现
    })
}

结果怪事来了——配置里的println("###############")每次构建都会打印,但监听器的逻辑只对src/test下的单元测试生效,src/androidTest里的插桩测试完全触发不了监听器。

后来我才搞明白问题根源:**Android插桩测试对应的Gradle任务类型不是Test,而是AndroidTest!**咱们平时写的本地单元测试任务类型是Test,所以之前的tasks.withType<Test>()只匹配到了单元测试的任务,根本没覆盖到插桩测试的任务。

给大家分享下修复后的配置:

如果只需要给插桩测试加监听器,把任务类型换成AndroidTest就行:

println("###############")
tasks.withType<AndroidTest>().configureEach {
    addTestListener(object : TestListener {
        override fun afterTest(testDescriptor: TestDescriptor, result: TestResult) {
            // 这里写插桩测试的监听器逻辑
            println("插桩测试 ${testDescriptor.displayName} 执行完毕,结果:${result.resultType}")
        }

        override fun beforeTest(testDescriptor: TestDescriptor) {
            println("准备执行插桩测试:${testDescriptor.displayName}")
        }

        override fun beforeSuite(suite: TestDescriptor) {
            // 可选:测试套件开始前的逻辑
        }

        override fun afterSuite(suite: TestDescriptor, result: TestResult) {
            // 可选:测试套件结束后的逻辑
        }
    })
}

要是想同时给单元测试和插桩测试都加监听器,那就两种任务类型都配置:

println("###############")
// 配置单元测试的监听器
tasks.withType<Test>().configureEach {
    addTestListener(object : TestListener {
        override fun afterTest(testDescriptor: TestDescriptor, result: TestResult) {
            println("单元测试 ${testDescriptor.displayName} 执行完毕,结果:${result.resultType}")
        }

        override fun beforeTest(testDescriptor: TestDescriptor) {
            println("准备执行单元测试:${testDescriptor.displayName}")
        }

        override fun beforeSuite(suite: TestDescriptor) {}
        override fun afterSuite(suite: TestDescriptor, result: TestResult) {}
    })
}

// 配置插桩测试的监听器
tasks.withType<AndroidTest>().configureEach {
    addTestListener(object : TestListener {
        override fun afterTest(testDescriptor: TestDescriptor, result: TestResult) {
            println("插桩测试 ${testDescriptor.displayName} 执行完毕,结果:${result.resultType}")
        }

        override fun beforeTest(testDescriptor: TestDescriptor) {
            println("准备执行插桩测试:${testDescriptor.displayName}")
        }

        override fun beforeSuite(suite: TestDescriptor) {}
        override fun afterSuite(suite: TestDescriptor, result: TestResult) {}
    })
}

另外要注意,用新版本Android Gradle Plugin(AGP)的话,得确保导入了正确的类,在build.gradle顶部加上这些导入语句:

import com.android.build.gradle.tasks.AndroidTest
import org.gradle.api.tasks.testing.TestListener
import org.gradle.api.tasks.testing.TestDescriptor
import org.gradle.api.tasks.testing.TestResult

这样改完之后,插桩测试的监听器就能正常工作啦!

备注:内容来源于stack exchange,提问作者18446744073709551615

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:30:27