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
相关产品推荐
相关产品推荐

