最近因Android项目需要,开始写一些unit test. 基础原理及一般流程可参照SDK,这里主要想说说UT的配置文件AndroidManifest.xml的一些注意事项。
UT工程的AndroidManifest.xml基本结构当然跟普通app的manifest文件一样。<package>, <application>, <activity>一应俱全,当然<instrumentation>是必须要有的.
<manifest package=...>, 这里的package就是安装完后出现在Settings -> Apps列表中的名字。
<application>/<uses-library android:name=...>这里<uses-library>必填“android.test.runner”
重点是<instrumentation>
1.<name>有多种写法, 不过都是android.test.Instrumentation的派生类, 其派生关系如下:
instrumentaion
这里的InstrumentationTestRunner, LaunchPerformanceBase, MyTestRunner都可以用作<instrumentation>的<name>.
2.<targetPackage>,Instrumentation会在这个包目录中查找相对应的test case 执行.test case包括AndroidTesCase,ActivityInstrumentationTestCase/2及其派生类等. 如果是默认的InstrumentationTestRunner, 则会在这个目录中递归执行所有的case.如果是自定义的TestRunner, 则会执行相应代码。
一个典型的AndroidManifest.xml如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.settings.tests">
<application>
<uses-library android:name="android.test.runner" />
<activity android:name="BluetoothRequestPermissionTest"
android:label="Bluetooth Perm Test" >
<intent-filter.../>
</activity>
<activity android:name="Operator" android:label="Operator Hook Test" >
<meta-data android:name="com.android.settings.title" android:resource="@string/operator_settings_title" />
</activity>
<activity android:name="Manufacturer" android:label="Manufacturer Hook Test" >
<intent-filter.../>
<meta-data android:name="com.android.settings.title" android:resource="@string/manufacturer_settings_title" />
</activity>
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.android.settings"
android:label="Settings App Tests">
</instrumentation>
<instrumentation android:name="SettingsLaunchPerformance"
android:targetPackage="com.android.settings"
android:label="Settings Launch Performance">
</instrumentation>
<instrumentation android:name="com.android.settings.SettingsTestRunner"
android:targetPackage="com.android.settings"
android:label="WifiPrioritySettigs Test">
</instrumentation>
</manifest>
adb push [xxx.apk] /data/spp, 安装该UT pkg
执行UT:
adb shell am instrument -w [pkg name]/[instrumentation name]
对于以上的manifest文件,此处的[pkg name]是 com.android.settings.tests. [instrumentation]可以是任意一个 instrumentaion, 比如com.android.settings.SettingsTestRunner。