跳到主內容

測試外掛

瞭解如何測試你的外掛包。

所有常見的 Flutter 測試型別同樣適用於外掛包,但由於外掛包含原生程式碼,它們通常還需要其他型別的測試來驗證其全部功能。

外掛測試型別

#

如需檢視這些測試型別的示例,你可以透過外掛模板建立一個新外掛,並檢視指定目錄。

  • Dart 單元測試元件(Widget)測試。這些測試允許你像測試普通 Dart 包一樣測試外掛的 Dart 部分。但是,外掛的原生程式碼不會被載入,因此對平臺通道(platform channels)的任何呼叫都需要在測試中進行模擬(Mock)

    檢視 test 目錄以獲取示例。

  • Dart 整合測試。由於整合測試是在 Flutter 應用程式(示例應用)的環境中執行的,它們可以同時測試 Dart 和原生程式碼,以及兩者之間的互動。它們對於測試需要在瀏覽器中執行的 Web 實現程式碼也非常有用。

    對於外掛而言,這通常是最重要的測試。但是,使用 integration_test 的 Dart 整合測試無法與原生 UI 互動,例如原生對話方塊或平臺檢視的內容。如需支援原生元件互動,請考慮使用 patrol

    檢視 example/integration_test 目錄以獲取示例。

  • 原生單元測試。 就像 Dart 單元測試可以獨立測試外掛的 Dart 部分一樣,原生單元測試可以獨立測試原生部分。每個平臺都有自己的原生單元測試系統,測試程式碼的編寫語言與被測程式碼的原生語言相同。

    如果你需要模擬外掛程式碼所包裝的 API(這在 Dart 整合測試中是不可能的),原生單元測試會非常有價值。

    你可以為每個平臺設定和使用你熟悉的任何原生測試框架,但以下框架已在外掛模板中預先配置好:

    • Android: JUnit 測試位於 android/src/test/

    • iOSmacOS: XCTest 測試分別位於 example/ios/RunnerTests/example/macos/RunnerTests/。這些位於 example 目錄中,而不是頂級包目錄中,因為它們是透過示例應用的工程執行的。

    • LinuxWindows: GoogleTest 測試分別位於 linux/test/windows/test/

其他型別且目前未在模板中預先配置的是原生 UI 測試。在原生 UI 測試框架(如 EspressoXCUITest)下執行你的應用程式,可以實現與原生 UI 和 Flutter UI 元素同時互動的測試,因此如果你的外掛無法在沒有原生 UI 互動的情況下進行測試,這會非常有用。

執行測試

#

Dart 單元測試

#

這些測試可以像其他任何 Flutter 單元測試一樣執行,既可以從你偏好的 Flutter IDE 中執行,也可以使用 flutter test 命令。

整合測試

#

有關執行此類測試的資訊,請查閱整合測試文件。命令必須在 example 目錄下執行。

原生單元測試

#

對於所有平臺,在執行單元測試之前,你至少需要構建一次示例應用程式,以確保所有特定於平臺的構建檔案都已建立。

Android JUnit

如果你已在 Android Studio 中將示例作為 Android 專案開啟,則可以使用 Android Studio 測試 UI 執行單元測試。

若要從命令列執行測試,請在 example/android 目錄中使用以下命令:

sh
./gradlew testDebugUnitTest

iOS 和 macOS XCTest

如果你已在 Xcode 中開啟示例應用,則可以使用 Xcode 測試 UI 執行單元測試。

若要從命令列執行測試,請在 example/ios (針對 iOS) 或 example/macos (針對 macOS) 目錄中使用以下命令:

sh
xcodebuild test -workspace Runner.xcworkspace -scheme Runner -configuration Debug

對於 iOS 測試,你可能需要先在 Xcode 中開啟 Runner.xcworkspace 來配置程式碼簽名。

Linux GoogleTest

若要從命令列執行測試,請在示例目錄中使用以下命令,並將 "my_plugin" 替換為你的外掛專案名稱:

sh
build/linux/plugins/x64/debug/my_plugin/my_plugin_test

如果你是以 release 模式而非 debug 模式構建的示例應用,請將 "debug" 替換為 "release"。

Windows GoogleTest

如果你已在 Visual Studio 中開啟示例應用,則可以使用 Visual Studio 測試 UI 執行單元測試。

若要從命令列執行測試,請在示例目錄中使用以下命令,並將 "my_plugin" 替換為你的外掛專案名稱:

sh
build/windows/plugins/my_plugin/Debug/my_plugin_test.exe

如果你是以 release 模式而非 debug 模式構建的示例應用,請將 "Debug" 替換為 "Release"。

應新增哪些測試型別

#

針對 Flutter 專案的常規測試建議同樣適用於外掛。關於外掛測試的一些額外考慮:

  • 由於只有整合測試才能測試 Dart 與原生語言之間的通訊,請嘗試為每個平臺通道呼叫至少編寫一個整合測試。

  • 如果某些流程無法使用 integration_test 包進行測試(例如,如果它們需要與原生 UI 互動或模擬裝置狀態),請考慮使用 patrol 包進行原生 UI 互動,或者透過以下方式為兩端編寫“端到端”測試:

    • 原生單元測試:設定必要的模擬(Mocks),然後使用合成呼叫(synthesized call)呼叫方法通道的入口點,並驗證方法響應。

    • Dart 單元測試:模擬平臺通道,然後呼叫外掛的公共 API 並驗證結果。