在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 測試相關 API
monkeyrunner 簡介
Android 測試教程(14):ActivityInstrumentationTestCase2 示例
ApplicationTestCase 示例
Android 測試教程(13):TestCase 示例
ActivityInstrumentationTestCase2 示例
測試 Activity
測試項目
Android 測試教程(12):ServiceTestCase 示例
測試相關 API
Monkey 命令行工具
第一個測試項目 HelloWorldTest
測試 Content Provider
Android 測試教程(11):ActivityUnitTestCase 示例
測試基礎
AndroidTestCase 示例
測試 Service

測試相關 API

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 方法 顯示測試結(jié)果,這些 Assert 方法可以通過比較預期的值和實際的值,如果不同可以排除異常。Android 測試 API 擴展了一些 Assert 方法用于支持和 Android 平臺相關的比較。

要注意的是,Android 測試 API 支持 JUnit 3 代碼風格,而不支持 JUnit 4 代碼風格,也只能使用 InstrumentationTestRunner 來運行測試用例。

Instrumentation

Android 的 Instrumentation 提供了一些“鉤子”方法連接到 Android 操作系統(tǒng)中,可以獨立控制 Android 組件(Activity,Service 等)的生命周期,并可以控制 Android 如何調(diào)用一個應用。

在通常情況下(普通的 Android 應用),Android 的 activity,Service 等的生命周期是由 Android 操作系統(tǒng)來控制的。 比如一個 Activity 的生命周期開始于 onCreate (由某個 Intent 激活),然后是 onResume. 可以參見 Android 簡明開發(fā)教程五:Activities。 應用程序本身無法直接控制這些生命周期狀態(tài)的切換。但使用 Instrumatation API 時你可以直接調(diào)用這些方法。

Instrumentation API 也可以支持強制某個應用和另一個已經(jīng)在運作的應用運行在同一個進程中,這在通常的情況下是不可能實現(xiàn)的。

使用 Instrumentation API 你可以直接調(diào)用 Activity 或是 Service 的生命周期回調(diào)函數(shù),從而可以讓你運行一步一步的運行 Activity 或是 Service 的生命周期函數(shù)。如下例顯示了如何使用 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(),只有調(diào)用 getActivity() 后被測試的 activity 才會啟動。此外 Instrumentation API 允許把測試項目和被測試的應用項目運行到同一個進程中,從而在測試代碼中可以直接調(diào)用被測試應用的方法和訪問其成員。

Test case 相關類

Android 提供了多個由 Testcase 或 Assert 派生而來的子類以支持 Android 平臺相關的 setup,teardown 和其它輔助方法。

  • AndroidTestCase 為一 Android 平臺下通用的測試類,它支持所有 JUnit 的 Assert 方法和標準的 setUp 和 tearDown 方法,并可以用來測試 Android permission 。
  • 組件相關的測試類如測試 activity, Content provider ,Service 相關的測試類,Android 沒有提供單獨的用來測試 BroadcastReceiver 的測試類,而是可以通過發(fā)送 Intent 對象來檢測 Broadcast Receiver 的反應結(jié)果來測試 BroadcastReceiver。
  • ApplicationTestCase 可以用來測試 Application 對象。
  • InstrumentationTestCase 如果你要使用 Instrumentation API,那么你必須使用 InstrumentationTestCase 或其子類。

Assertion classes

Android 測試中可以使用 JUnit 中提供的 Assert 方法來顯示測試結(jié)果。除此之外,Testing API 還提供了 MoreAsserts 和 ViewAsserts 類。其中 MoreAsserts 支持更多的比較方法包括 RegEx(正則)比較等。ViewAsserts 可以用來校驗 UI View。

Mock object classes

android.test.mock 包中定義一些測試“樁”類,如 MockApplication,MockContentProvider ,MockContext,MockCursor, MockPackagManager 等用例幫助測試。

后面將具體介紹如何使用這些 API 來編寫測試用例。