原文地址:https://developer.android.com/tools/testing/testing_otheride.html
這章主要講解使用命令行來創建測試工程、創建測試類、運行測試和使用Instrumentation 命令。
創建測試工程
創建一個新的測試工程的方法為:
android create test-project -m <main_path> -n <project_name> -p <test_path> |
下面講述上面命令行所涉及到的參數。
Flag |
Value |
Description |
-m或--main |
被測試項目的路徑(相對與該項目包的目錄) |
舉例:如果被測試項目的路徑是source/HelloAndroid,那麼這個參數後面就應該接 ../HelloAndroid |
-n或--name |
測試項目的名字 |
舉例:如果被測項目的名字是HelloAndroid,那麼我們可以定義為 HelloAndroidTest |
-p或--path |
存放測試項目的目錄 |
存放Android tool生成的文件和目錄。 |
舉例如下:
parker@parker:~$ cd /data/workplace/ parker@parker:/data/workplace$ android create test-project -m ../HelloAndroid -n HelloAndroidTest -p HelloAndroidTest |
更新測試工程
如果已經創建了一個測試工程,但是我們現在想改變它,我們可以使用:
android update test-project -m <main_path> -p <test_path> |
創建測試類
雖然你的测试包可以结合activity、android测试扩展类、Junit扩展或者普通类,但是你应该继承android测试类或者Junit类,因为它们提供了最好的测试功能。
如果你通过InstrumentationTestRunner(或者相关的test runner)运行你的测试,它会运行每个类中的所有测试方法。你可以通过使用TestSuit类改变这些行为。
測試包中有提供了Instrumentation的測試類和一些继承了TestCase的类。這些類可能要覆写setUp()和tearDown()方法。setUp()主要是为测试设置环境,你可以在这里初始化一个Intent对象,可以使用intent开启测试activity。tearDown()主要在完成所有的测试放法后调用,它在移动到下一组测试之前垃圾回收和重新设定。
一般来说,我们也经常把testPreConditions()方法添加到测试类中。这个方法用来正确的初始化测试应用。如果测试失败,你知道是初始化出现错误。当出现这种情况,进一步测试的结果是有疑问的,除非你不管测试是否成功。
運行測試
1. 我們可以通過ant 快速的編譯和運行android 測試項目。我們可以使用ant來運行測試項目中所有的測試。
2. 我們還可以在模擬器和真實設備中運行測試項目。首先要將被測試的應用和測試工程都編譯到設備中,然後調用adb shell 中的am命令。
$ adb shell am instrument -w <test_package_name>/<runner_class> |
<test_package_name>為測試項目的包名,<runner_class>為android test runner的名字,一般和androidManifest中<instrumentation>對象中的name一致。
下面講述上面命令行所涉及到的參數。
Flag |
Value |
Description |
-w |
None |
保持adb shell打开直至测试完成 |
-r |
None |
以原始形式输出测试结果。该选项通常是在性能测试时与-e perf true一起使用 |
-e |
<test_operation> |
提供了以键值对形式存在的测试选项。Android中提供了多种键值对,详细情况可以自己查阅http://developer.android.com/tools/testing/testing_otheride.html#AMSyntax |
舉例如下:
root@android:/ # am instrument -w aexp.junit.test/android.test.InstrumentationTestRunner aexp.junit.ContactTest:... aexp.junit.MathTest:.. Test results for InstrumentationTestRunner=..... Time: 0.204 OK (5 tests) |