編輯:Android開發教程
Android的測試框架相關的API主要定義在三個包中:
android.test 用於編寫Android測試用例
android.test.mock 定義了方便測試用的測試“樁”類
android.test.suitebuilder 運行測試用例的Test Runner類
Android 測試API 是基於JUnit 擴展而來,並添加了與Android平台相關的測試API。
JUnit
你可以直接使用 JUnit中相關API編寫一些和平台無關的測試用例(基於TestCase), Android 測試API中提供了一個TestCase的子類 AndroidTestCase ,可以用來編寫一些Android相關的對象的測試用例,AndroidTestCase 支持一些和平台相關的 setup,teardown 以及setup 方法。
你也可以直接使用JUnit 的Assert 方法 顯示測試結果,這些Assert方法可以通過比 較預期的值和實際的值,如果不同可以排除異常。Android 測試API擴展了一些Assert方法用於支持和Android平台相關的比較。
要注意的是,Android 測試API支持JUnit 3 代碼風格,而不支持JUnit 4 代碼風格,也只能使用 InstrumentationTestRunner 來運行測試用例。
Instrumentation
Android 的Instrumentation 提供了一些“鉤 子”方法連接到Android操作系統中,可以獨立控制Android組件(Activity,Service等)的生命周期,並可以控制Android如何 調用一個應用。
在通常情況下(普通的Android應用),Android的activity,Service等的生命周期是由
Android 操作系統來控制的。 比如一個Activity 的生命周期開始於onCreate (由某個Intent激活),然後是onResume. 可以參見 Android簡明開發教程五:Activities。 應用程序本身無法直接控制這些生命周期狀態的切換。但使用Instrumatation API時你 可以直接調用這些方法。
Instrumentation API 也可以支持強制某個應用和另一個已經在運作的應用運行在同一個進程 中,這在通常的情況下是不可能實現的。
使用Instrumentation API 你可以直接調用Activity或是Service的生命周期回 調函數,從而可以讓你運行一步一步的運行Activity或是Service的生命周期函數。如下例顯示了如何使用Instrumentation API 來測試Activity 保持和恢復State。
// Start the main activity of the // application under test mActivity = getActivity(); // Get a handle to the Activity object's //main UI widget, a Spinner mSpinner = (Spinner)mActivity .findViewById(com.android.example.spinner.R.id.Spinner01); // Set the Spinner to a known position mActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION); // Stop the activity - The onDestroy() //method should save the state of the Spinner mActivity.finish(); // Re-start the Activity - the onResume() //method should restore the state of the Spinner mActivity = getActivity(); // Get the Spinner's current position int currentPosition = mActivity.getSpinnerPosition(); // Assert that the current position is the //same as the starting position assertEquals(TEST_STATE_DESTROY_POSITION, currentPosition);
其中關鍵的一個方法是getActivity(),只有調用 getActivity()後被測試的activity才會啟動。此外Instrumentation API允許把測試項目和被測試的應用項目運行到同一個進程 中,從而在測試代碼中可以直接調用被測試應用的方法和訪問其成員。
Test case 相關類
Android提供了多個由 Testcase或Assert派生而來的子類以支持Android平台相關的setup,teardown 和其它輔助方法。
AndroidTestCase 為一 Android平台下通用的測試類,它支持所有JUnit的Assert方法和標准的setUp 和tearDown 方法,並可以用來測試Android permission 。
組件相關的測試類如測試activity, Content provider ,Service 相關的測試類,Android沒有提供單獨 的用來測試BroadcastReceiver 的測試類,而是可以通過發送Intent對象來檢測Broadcast Receiver的反應結果來測試 BroadcastReceiver。
ApplicationTestCase 可以用來測試Application 對象。
InstrumentationTestCase 如果 你要使用Instrumentation API,那麼你必須使用InstrumentationTestCase或其子類。
Assertion classes
Android測試中可以使用JUnit中提供的Assert方法來顯示測試結果。除此之外,Testing API還提供了 MoreAsserts 和ViewAsserts 類。其中MoreAsserts支持更多的比較方法包括RegEx(正則)比較等。ViewAsserts 可以用來校驗 UI View。
Mock object classes
android.test.mock 包中定義一些測試“樁”類,如MockApplication, MockContentProvider ,MockContext,MockCursor, MockPackagManager等用例幫助測試。
後面將具體介紹如何使用這些 API來編寫測試用例。
查看全套教程:http://www.bianceng.cn/OS/extra/201301/35252.htm
Android和iOS誰更強?看到這個問題兩大陣營的用戶們估計又要吵翻天了。但誰都不能否認的是,這兩款操作系統都具備著超強的實力,才能夠取得如今的成績。在最近,Andro
這兩天需要做音視頻播放相關的東西,所以重新找了目前android下的解碼庫。Android自帶的解碼庫支持不全,因此很多第三方播放器都是自帶解碼器,絕大部分都是使用FFM
SetWallpaper介紹如何在Android獲取當前Wallpaper,對Wallpaper做些修改,然後用修改後的圖像重新設置Wallpaper。Wallpaper
Android網絡應用開發,主要有兩種方式,一種是socket(是對tcp/udp協議的封裝),另外一種就是使用Http協議,Android中主要提供了兩種方式,Http