0%

Android SDK中的自动化测试

Android中的测试手段非常丰富。通常上,按测试运行环境来划分,可以分为本地单元测试与Instrument测试:

|运行环境|测试类型|
|—|—|
|PC机|本地Unit Test|
|Android手机或模拟器|Instrument Test|


这两种类型测试源码在工程的位置分别为:

测试类型 对应目录
本地Unit Test module-name/src/test/java
Instrument Test module-name/src/androidTest/java



这两种测试使用的Runner不同:

测试类型 TestRunner
本地Unit Test JUnit4
Instrument Test JUnit3
AndroidJunit4



本地Unit Test由于使用Junit4,因此与java中的单元测试区别不大,可以灵活的使用Mockito来模拟调用Android的API。同时Android Studio在构建APP时,也会自动生成一个MockableAndroid.jar来支持这一需求。
Instrument类型测试由于类库较多,因此使用的Runner也有所不同。比较常见到的有:

类名 说明 Runner
ApplicationTestCase Studio默认生成的类,用于测试Application。其可以完整控制Application的生命周期,并且可以通过setContext传入Mock的Context对象进行注入测试。 Junit3
InstrumentationTestCase 自Eclipse环境起常用的测试类。可以通过获取到Instrument控制APP运行,内部方法较为通用,通常需要二次封装,并且APP中改进一些测试友好的设计。 Junit3
ActivityInstrumentationTestCase 专门设计来测试Activity的类,不过现在已经废弃了,由ActivityInstrumentationTestCase2代替 AndroidJunit4
ActivityInstrumentationTestCase2 新的测试Activity的类,可以通过getAvtivity方法直接获取到被测Activity;不过查阅最新的api24文档,这个类也可能要被废弃 AndroidJunit4
ServiceTestCase 专门测试Service的类 AndroidJunit4



以上几个类在Android SDK中就可以找到,都位于android.test包中。当然这个包中还有很多其他的测试类。
在Android 5.0版本起,Google又提供了一个专门用于自动化测试的Support包Android Testing Support Library,其中包括了测试所必要的AndroidJUnitRunner,还包括了两个重要组件:
EspressoUI Automator,这两者均是用来做UI自动化测试的框架。区别在于Espresso适用于单APP内部UI测试,而UI Automator适用于跨APP测UI测试。