- Espresso 測試框架教程
- Espresso 測試 - 首頁
- 簡介
- 設定說明
- 在 Android Studio 中執行測試
- JUnit 概述
- 架構
- 檢視匹配器
- 自定義檢視匹配器
- 檢視斷言
- 檢視操作
- 測試 AdapterView
- 測試 WebView
- 測試非同步操作
- 測試 Intent
- 測試多個應用程式的 UI
- 測試錄製器
- 測試 UI 效能
- 測試可訪問性
- Espresso 測試資源
- Espresso 測試 - 快速指南
- Espresso 測試 - 有用資源
- Espresso 測試 - 討論
Espresso 測試框架 - 架構
在本章中,讓我們學習 Espresso 測試框架的術語,如何編寫一個簡單的 Espresso 測試用例以及 Espresso 測試框架的完整工作流程或架構。
概述
Espresso 提供了大量的類來測試使用者介面和 Android 應用程式的使用者互動。它們可以分為以下五類:
JUnit 執行器
Android 測試框架提供了一個執行器 AndroidJUnitRunner 來執行用 JUnit3 和 JUnit4 風格編寫的 Espresso 測試用例。它專用於 Android 應用程式,並且可以透明地處理在實際裝置或模擬器中載入 Espresso 測試用例和被測應用程式、執行測試用例以及報告測試用例結果。要在測試用例中使用 AndroidJUnitRunner,我們需要使用 @RunWith 註解對測試類進行註解,然後傳遞 AndroidJUnitRunner 引數,如下所示:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
}
JUnit 規則
Android 測試框架提供了一個規則 ActivityTestRule,用於在執行測試用例之前啟動 Android 活動。它在每個用 @Test 和 @Before 註解的方法之前啟動活動。它將在用 @After 註解的方法之後終止活動。示例程式碼如下:
@Rule public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
這裡,MainActivity 是在執行測試用例之前要啟動的活動,並在執行完特定測試用例後銷燬。
ViewMatchers
Espresso 提供了大量的檢視匹配器類(在 androidx.test.espresso.matcher.ViewMatchers 包中)來匹配和查詢 Android 活動螢幕檢視層次結構中的 UI 元素/檢視。Espresso 的方法 onView 接收一個型別為 Matcher(檢視匹配器)的單個引數,找到相應的 UI 檢視並返回相應的 ViewInteraction 物件。onView 方法返回的 ViewInteraction 物件可以進一步用於呼叫諸如單擊匹配的檢視之類的操作,或者可以用於斷言匹配的檢視。查詢文字為“Hello World!”的檢視的示例程式碼如下:
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
這裡,withText 是一個匹配器,可用於匹配具有文字“Hello World!”的 UI 檢視。
ViewActions
Espresso 提供了大量的檢視操作類(在 androidx.test.espresso.action.ViewActions 中)來在選定的/匹配的檢視上呼叫不同的操作。一旦 onView 匹配並返回 ViewInteraction 物件,就可以透過呼叫 ViewInteraction 物件的“perform”方法並將其與適當的檢視操作一起傳遞來呼叫任何操作。單擊匹配檢視的示例程式碼如下:
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
viewInteraction.perform(click());
這裡,將呼叫匹配檢視的點選操作。
ViewAssertions
與檢視匹配器和檢視操作類似,Espresso 提供了大量的檢視斷言(在 androidx.test.espresso.assertion.ViewAssertions 包中)來斷言匹配的檢視是我們期望的。一旦 onView 匹配並返回 ViewInteraction 物件,就可以透過將 ViewInteraction 的 check 方法與適當的檢視斷言一起傳遞來檢查任何斷言。斷言匹配檢視的示例程式碼如下:
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
viewInteraction.check(matches(withId(R.id.text_view)));
這裡,matches 接受檢視匹配器並返回檢視斷言,可以透過 ViewInteraction 的 check 方法進行檢查。
Espresso 測試框架的工作流程
讓我們瞭解 Espresso 測試框架是如何工作的,以及它如何以簡單靈活的方式提供執行任何種類使用者互動的選項。Espresso 測試用例的工作流程如下所述:
正如我們之前瞭解到的,Android JUnit 執行器 AndroidJUnit4 將執行 Android 測試用例。Espresso 測試用例需要用 @RunWith(AndroidJUnut.class) 標記。首先,AndroidJUnit4 將準備執行測試用例的環境。它啟動連線的 Android 裝置或模擬器,安裝應用程式並確保要測試的應用程式處於就緒狀態。它將執行測試用例並報告結果。
Espresso 至少需要一個型別為 ActivityTestRule 的 JUnit 規則來指定活動。Android JUnit 執行器將使用 ActivityTestRule 啟動要啟動的活動。
每個測試用例至少需要一個 onView 或 onDate(用於查詢基於資料檢視,例如 AdapterView)方法呼叫來匹配和查詢所需的檢視。onView 或 onData 返回 ViewInteraction 物件。
一旦返回了 ViewInteraction 物件,我們就可以呼叫所選檢視的操作,或者使用斷言檢查檢視以獲取我們期望的檢視。
可以使用 ViewInteraction 物件的 perform 方法透過傳遞任何一個可用的檢視操作來呼叫操作。
可以使用 ViewInteraction 物件的 check 方法透過傳遞任何一個可用的檢視斷言來呼叫斷言。
工作流程的圖表表示如下:
示例 - 檢視斷言
讓我們編寫一個簡單的測試用例,在我們的“HelloWorldApp”應用程式中查詢文字為“Hello World!”的 TextView,然後使用檢視斷言對其進行斷言。完整的程式碼如下:
package com.tutorialspoint.espressosamples.helloworldapp;
import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.matcher.ViewMatchers.withText;;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void view_isCorrect() {
onView(withText("Hello World!")).check(matches(isDisplayed()));
}
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.tutorialspoint.espressosamples.helloworldapp", appContext.getPackageName());
}
}
這裡,我們使用了 withText 檢視匹配器來查詢文字為“Hello World!”的 TextView,並使用 matches 檢視斷言來斷言 TextView 是否正確顯示。一旦在 Android Studio 中呼叫測試用例,它將執行測試用例並報告如下成功訊息。
view_isCorrect 測試用例