这里讲的Android Testing主要针android packages(application).
1. 测试框架
1.1 TestCase:
跟其他流行的的Testing Framework一样,测试也分TestSuit,每个Suit有若干TestCase,每个TestCase有若干Method
1.2 TestRunner:
TestCase必须运行在某个testrunner之上。
Android支持多个TestRunner
InstrumentationTestRunner 继承自android.app.Instrumentation
Instrumentation是基类.当instrumentation打开(AndroidManifest.xml有instrumentation条目)后, instrumentation会在app启动之前先实例化,然后可以检测app运行状态。
比较土, 只支持Junit3,
支持instrumentation方法(methods).
Android instrumentation is a set of control methods or “hooks” in the Android system. These hooks control an Android component independently of its normal lifecycle.AndroidJUnitRunner, 继承自android.app.Instrumentation
支持Junit3, Junit4.Espresso: 单个app的UI 测试
- UI Automator: 跨app的UI测试
其中后三个runner在Android SDK的”Android Testing Support Library”中,SDK Mgr中的名字为”Android Support Repository”.
2. 代码结构
- 标准方式(使用Intellij Idea / Android Studio)
如果放到src/main/androidTest, 那么会生成2个apk,一个是<package_name>.apk, 一个是<package_name>.test.apk
建一个AndroidTest任务,Idea会依次安装两个apk,然后执行test - 直接暴力方式
如果放到src/main/java, 就可以直接生成apk,直接安装后用am instrument执行;
3. 运行测试用例
3.1 command line运行测试用例
帮助文件for InstrumentationTestRunner and AndroidJUnitRunner
am instrument -w <instrument_name>
am instrument -w -e <k> <v> <instrument_name>
am instrument -w -e class org.cfig.TestSuit <instrument_name>
am instrument -w -e class org.cfig.TestCase <instrument_name>
am instrument -w -e class org.cfig.TestCase#test1 <instrument_name>
实例
查看安装好的instrementation:
# pm list instrumentation
instrumentation:com.android.cts.view/android.support.test.runner.AndroidJUnitRunner
可以执行
am instrument -w -e class android.view.animation.cts.AnimatorInflaterTest com.android.cts.view/android.support.test.runner.AndroidJUnitRunner
3.2 IDE运行测试用例(idea)
创建AndroidTest运行任务,可以指定package/class/method.
感谢
Max Walker 2009年写的傻瓜教程https://newcircle.com/s/post/1038/android_junit_test_example_tutorial