写在前面:
阅读本篇文章之前,默认读者已具备基础安卓开发环境搭建+单元测试的能力和知识,如有需要请留言将单开一篇文章介绍安卓开发测试环境搭建、单元测试的相关知识
1、开发环境
• Windows 7 6.1
• Android Studio:3.2.1
• Gradle:gradle-4.1
• Robolectric:3.8
• Powermock:1.6.6
2、Gradle配置
• 不同的build.gradle(导入As工程代码后,切换到Project视图,如下图所示)
• 修改Project 最外层 build.gradle
• 被测工程的 build.gradle,加入相应依赖(注意robolectriche和powermockba版本要匹配,不然会出现org.junit包找不到的错误)
1. 单元测试一般在src/test/java 文件夹下,可通过在src目录单击右键New>Folder>Java Folder依次创建 test 和Java文件夹
2. 选择一个待测试的Activity,右键 Go TO >Test, 依次操作即可
3. 为测试类添加注解
这里MyRobolectricTestRunner.class 是RobolectricTestRunner的子类。后面会解释为什么做
4、踩过的坑
unable to resolve artifact: Missing:org.robolectric:android-all:jar:6.0.1_r3-robolectric-0
原因:oss.sonatype.org是一个Nexus搭建的maven仓库。robolectric第一次运行,从https://oss.sonatype.org/ 下载一些必要的依赖包。
解决办法:把oss.sonatype.org改成国内可以访问的maven 库,具体新建MyRobolectricTestRunner extends RobolectricTestRunner。后续测试类注解配置
java.lang.RuntimeException: MultiDex installation failed
原因:robolectric没有添加multi-dex shadow dependency。
官网解释如下(就不翻译了):In order to reduce the number of external dependencies on the application being tested, Robolectric’s shadows are split into various add-on packages. Only shadows for classes provided in the base Android SDK are provided by the main Robolectric module. Additional shadows for things like appcompat or the support library are provided by add-on modules. The table below lists the available add-on shadow packages
解决方法:被测工程的 build.gradle,加入相应依赖
dependencies {
testImplementation "org.robolectric:shadows-multidex:3.8"
}
注意:从Robolectric 3.5+之后,add-on modules名如下图所示。Robolectric 3.4.x从工件名称中删除了shadow-前缀。在3.4之前,除了shadow-supportv4和shadow-playservices分别是shadows-support-v4和shadow-play-services之外,所有工件名称都与最新名称相同。