Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android測試教程(4):測試相關API

Android測試教程(4):測試相關API

編輯: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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved