Android Studio 以簡化測試為設(shè)計宗旨。 您只需完成幾次點(diǎn)擊,便可建立一個在本地 JVM 上運(yùn)行的 JUnit 測試,或建立一個在設(shè)備上運(yùn)行的儀器測試。
當(dāng)然,您也可以通過集成測試框架來擴(kuò)展測試能力,例如可以集成 Mockito 在本地單元測試中測試 Android API 調(diào)用,以及集成 Espresso 或 UI Automator 在儀器測試中演練用戶交互。
您可以利用 Espresso 測試記錄器自動生成 Espresso 測試。
此頁面提供的基本信息介紹了如何在 Android Studio 中新增和運(yùn)行測試。
如需更完整的測試編寫方法指南,請參閱測試入門指南。
測試類型和位置
測試代碼的位置取決于您要編寫的測試的類型。 Android Studio 為以下兩種測試類型提供了源代碼目錄(源集):
本地單元測試
位于 module-name/src/test/java/。
這些測試在計算機(jī)的本地 Java 虛擬機(jī) (JVM) 上運(yùn)行。 當(dāng)您的測試沒有 Android 框架依賴項(xiàng)或當(dāng)您可以模擬 Android 框架依賴項(xiàng)時,可以利用這些測試來盡量縮短執(zhí)行時間。
在運(yùn)行時,這些測試的執(zhí)行對象是去掉了所有 final 修飾符的修改版 android.jar。 這樣一來,您就可以使用 Mockito 之類的常見模擬庫。
儀器測試
位于 module-name/src/androidTest/java/。
這些測試在硬件設(shè)備或模擬器上運(yùn)行。 這些測試有權(quán)訪問 Instrumentation API,讓您可以獲取某些信息(例如您要測試的應(yīng)用的 Context), 并且允許您通過測試代碼來控制受測應(yīng)用。 可以在編寫集成和功能 UI 測試來自動化用戶交互時,或者在測試具有模擬對象無法滿足的 Android 依賴項(xiàng)時使用這些測試。
由于儀器測試內(nèi)置于 APK 中(與您的應(yīng)用 APK 分離),因此它們必須擁有自己的 AndroidManifest.xml 文件。 不過,由于 Gradle 會自動在構(gòu)建時生成該文件,因此它在您的項(xiàng)目源集中不可見。 您可以在必要時(例如需要為 minSdkVersion
指定其他值或注冊測試專用的運(yùn)行偵聽器時)添加自己的清單文件。 構(gòu)建應(yīng)用時,Gradle 會將多個清單文件合并成一個清單。
Gradle 構(gòu)建解讀這些測試源集的方式與其解讀項(xiàng)目應(yīng)用源集的方式相同,您可以利用這一點(diǎn)根據(jù)構(gòu)建變體創(chuàng)建測試。
當(dāng)您新建項(xiàng)目或添加應(yīng)用模塊時,Android Studio 會創(chuàng)建以上所列的測試源集,并在每個源集中加入一個示例測試文件。
您可以在 Project 窗口中看到它們,如圖 1 所示。
添加一個新測試
要創(chuàng)建一個本地單元測試或儀器測試,您可以按照以下步驟新建針對特定類或方法的測試:
1> 打開包含您想測試的代碼的 Java 文件。
2> 點(diǎn)擊您想測試的類或方法,然后按 Ctrl+Shift+T (??T)。
3> 在出現(xiàn)的菜單中,點(diǎn)擊 Create New Test。
4> 在 Create Test 對話框中,編輯任何字段并選擇任何要生成的方法,然后點(diǎn)擊 OK。
5> 在 Choose Destination Directory 對話框中,點(diǎn)擊與您想創(chuàng)建的測試類型對應(yīng)的源集:androidTest 對應(yīng)于儀器測試,test 對應(yīng)于本地單元測試。
然后點(diǎn)擊 OK。
您也可以按如下所述在相應(yīng)測試源集中創(chuàng)建一個通用 Java 文件:
1> 在左側(cè)的 Project 窗口中,點(diǎn)擊下拉菜單并選擇 Project 視圖。
2> 展開相應(yīng)的模塊文件夾和嵌套的 src 文件夾。 要添加本地單元測試,請展開 test 文件夾和嵌套的 java 文件夾;要添加儀器測試,請展開 androidTest 文件夾和嵌套的 java 文件夾。
3> 右鍵點(diǎn)擊 Java 軟件包目錄并選擇 New > Java Class。
4> 命名文件,然后點(diǎn)擊 OK。
此外,請務(wù)必在應(yīng)用模塊的 build.gradle 文件中指定測試庫依賴項(xiàng):
dependencies {
// Required for local unit tests (JUnit 4 framework)
testCompile 'junit:junit:4.12'
// Required for instrumented tests
androidTestCompile 'com.android.support:support-annotations:24.0.0'
androidTestCompile 'com.android.support.test:runner:0.5'
}
如需了解其他可選內(nèi)容庫依賴項(xiàng)以及有關(guān)如何編寫測試的詳細(xì)信息,請參閱構(gòu)建本地單元測試 和構(gòu)建儀器單元測試。
創(chuàng)建適用于構(gòu)建變體的儀器測試
如果您的項(xiàng)目包括的構(gòu)建變體 具有唯一的源集,則您可能需要相應(yīng)的儀器測試源集。
在源集中創(chuàng)建與您的構(gòu)建變體對應(yīng)的儀器測試有助于保持測試代碼的條理性,也便于您只運(yùn)行適用于給定構(gòu)建變體的測試。
要添加適用于您的構(gòu)建變體的測試源集,請執(zhí)行以下步驟:
1> 在左側(cè)的 Project 窗口中,點(diǎn)擊下拉菜單并選擇 Project 視圖。
2> 在相應(yīng)模塊文件夾內(nèi),右鍵點(diǎn)擊 src 文件夾,然后點(diǎn)擊 New > Directory。
3> 輸入“androidTestVariantName”作為目錄名稱。例如,如果您的構(gòu)建變體名為“MyFlavor”,則目錄名稱應(yīng)為“androidTestMyFlavor”。然后點(diǎn)擊 OK。
4> 右鍵點(diǎn)擊新目錄,然后點(diǎn)擊 New > Directory。
5> 輸入“java”作為目錄名稱,然后點(diǎn)擊 OK。
現(xiàn)在您就可以按照以上新增測試的步驟向這個新源集添加測試了。 當(dāng)您到達(dá) Choose Destination Directory 對話框時,選擇新的變體測試源集。
src/androidTest/ 源集中的儀器測試由所有構(gòu)建變體共享。 構(gòu)建適用于應(yīng)用的“MyFlavor”變體的測試 APK 時,Gradle 會將 src/androidTest/ 和 src/androidTestMyFlavor/ 這兩個源集合并。
例如,下表顯示的就是儀器測試文件所在源集路徑與應(yīng)用代碼源集路徑的對應(yīng)關(guān)系。
應(yīng)用類的路徑 | 對應(yīng)儀器測試類的路徑 |
---|---|
src/main/java/Foo.java | src/androidTest/java/AndroidFooTest.java |
src/myFlavor/java/Foo.java | src/androidTestMyFlavor/java/AndroidFooTest.java |
Gradle 構(gòu)建會合并和替換來自不同測試源集的文件,這與它對應(yīng)用源集的處理方法完全相同。 在本例中,“androidTestMyFlavor”源集中的 AndroidFooTest.java 文件會替換“androidTest”源集中的版本。
如需了解有關(guān)源集合并方法的詳細(xì)信息,請參閱配置構(gòu)建。
您應(yīng)該為應(yīng)用和測試源集使用構(gòu)建變體的另一個原因是,通過模擬依賴項(xiàng)創(chuàng)建封閉測試。 也就是說,您可以為應(yīng)用創(chuàng)建一個包含依賴項(xiàng)模擬實(shí)現(xiàn)(例如慣常不穩(wěn)定的網(wǎng)絡(luò)請求或設(shè)備傳感器數(shù)據(jù))的產(chǎn)品風(fēng)味,然后添加一個對應(yīng)的模擬測試源集。
如需了解詳細(xì)信息,請參閱有關(guān)利用產(chǎn)品風(fēng)味進(jìn)行封閉測試 的博文。
運(yùn)行測試
要運(yùn)行測試,請執(zhí)行如下操作:
1> 點(diǎn)擊工具欄中的 Sync Project ,確保您的項(xiàng)目已與 Gradle 同步。
2> 以下列其中一種方式運(yùn)行測試:
a> 在 Project 窗口中,右鍵點(diǎn)擊測試,然后點(diǎn)擊 Run
b> 在代碼編輯器中,右鍵點(diǎn)擊測試文件中的某個類或方法,然后點(diǎn)擊 Run 來測試該類中的所有方法。
c> 要運(yùn)行所有測試,右鍵點(diǎn)擊測試目錄,然后點(diǎn)擊 Run tests 。
默認(rèn)情況下,您的測試運(yùn)行時使用的是 Android Studio 默認(rèn)的運(yùn)行配置。 如果您想更改某些運(yùn)行設(shè)置(例如儀器運(yùn)行器和部署選項(xiàng)),可以在 Run/Debug Configurations 對話框中編輯運(yùn)行配置(點(diǎn)擊 Run > Edit Configurations)。
更改測試構(gòu)建類型
默認(rèn)情況下,所有測試均針對Debug構(gòu)建類型運(yùn)行。 您可以利用模塊級 build.gradle 文件中的 testBuildType 屬性將其更改為其他構(gòu)建類型。
例如,如果您想針對“staging”構(gòu)建類型運(yùn)行測試,請按下面這段代碼中所示對該文件進(jìn)行編輯。
android {
...
testBuildType "staging"
}