Android 测试用例在升级到 Java 8 和构建工具版本 25 后失败
Android test cases failing after upgrading to Java 8 and build tools version 25
我有一堆测试用例 运行 没问题。但是一旦我的项目更新为构建工具版本 25 并且 Java 更新为 JDK 1.8,我所有的测试用例都失败了。
当我 运行 我的测试使用 ./gradlew cAT 时,我收到错误消息:
检测 运行 由于 'java.lang.NullPointerException' 而失败
com.android.builder.testing.ConnectedDevice > 未找到测试。[Nexus 6 - 6.0.1] 失败
或
Nexus 6 上的测试 - 6.0.1 失败:检测 运行 由于 'java.lang.ClassNotFoundException'
而失败
com.android.builder.testing.ConnectedDevice > 未找到测试。[Nexus 6 - 6.0.1] 失败
我的 build.gradle 有以下几行:
androidTestCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test:runner:0.4'
androidTestCompile 'com.android.support.test:rules:0.4'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
知道解决方案是什么吗?
更新:
当我尝试使用 ./gradlew -cAT -s 从 gradle 运行 相同时,我看到以下异常:
原因:java.lang.NoClassDefFoundError:org/gradle/logging/ConsoleRenderer
在 com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask.运行Tests(DeviceProviderInstrumentTestTask.java:140)
在 org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:621)
在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:604)
在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
... 还有 68 个
谷歌搜索告诉我这可能是 gradle 2.14 的特定问题,但我的测试之前在相同的 gradle 版本上运行良好。
事实证明,根本原因是在我的基本上下文初始化期间出现空指针!
我的学习:
无论我们使用IDE还是gradle来运行测试用例,它们最终都会调用am instrumentation命令(https://developer.android.com/studio/test/command-line.html).
运行 the command adb shell am instrument -w -r -e debug true -e class (注意我已经设置debug为true) .
同时,让您的 adb logcat 运行ning。这告诉我为什么我会遇到 NPE。
我有一堆测试用例 运行 没问题。但是一旦我的项目更新为构建工具版本 25 并且 Java 更新为 JDK 1.8,我所有的测试用例都失败了。
当我 运行 我的测试使用 ./gradlew cAT 时,我收到错误消息:
检测 运行 由于 'java.lang.NullPointerException' 而失败 com.android.builder.testing.ConnectedDevice > 未找到测试。[Nexus 6 - 6.0.1] 失败
或
Nexus 6 上的测试 - 6.0.1 失败:检测 运行 由于 'java.lang.ClassNotFoundException'
而失败com.android.builder.testing.ConnectedDevice > 未找到测试。[Nexus 6 - 6.0.1] 失败
我的 build.gradle 有以下几行:
androidTestCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test:runner:0.4'
androidTestCompile 'com.android.support.test:rules:0.4'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
知道解决方案是什么吗?
更新:
当我尝试使用 ./gradlew -cAT -s 从 gradle 运行 相同时,我看到以下异常:
原因:java.lang.NoClassDefFoundError:org/gradle/logging/ConsoleRenderer 在 com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask.运行Tests(DeviceProviderInstrumentTestTask.java:140) 在 org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) 在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228) 在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221) 在 org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210) 在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:621) 在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:604) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) ... 还有 68 个
谷歌搜索告诉我这可能是 gradle 2.14 的特定问题,但我的测试之前在相同的 gradle 版本上运行良好。
事实证明,根本原因是在我的基本上下文初始化期间出现空指针!
我的学习:
无论我们使用IDE还是gradle来运行测试用例,它们最终都会调用am instrumentation命令(https://developer.android.com/studio/test/command-line.html).
运行 the command adb shell am instrument -w -r -e debug true -e class (注意我已经设置debug为true) .
同时,让您的 adb logcat 运行ning。这告诉我为什么我会遇到 NPE。