跳到主要內容

測試外掛程式

所有Flutter 測試的常用類型也適用於外掛程式套件,但由於外掛程式包含原生程式碼,它們通常也需要其他類型的測試來測試其所有功能。

外掛程式測試的類型

#

要查看每種類型測試的範例,您可以從外掛程式範本建立新的外掛程式,並在指示的目錄中尋找。

  • Dart 單元測試widget 測試。這些測試可讓您測試外掛程式的 Dart 部分,就像您測試非外掛程式套件的 Dart 程式碼一樣。但是,外掛程式的原生程式碼將不會被載入,因此對平台通道的任何呼叫都需要在測試中模擬

    請參閱 test 目錄中的範例。

  • Dart 整合測試。由於整合測試在 Flutter 應用程式(範例應用程式)的環境中執行,因此它們可以測試 Dart 和原生程式碼,以及它們之間的互動。它們也可用於單元測試需要在瀏覽器中執行的 Web 實作程式碼。

    這些通常是外掛程式最重要的測試。但是,Dart 整合測試無法與原生 UI 互動,例如原生對話方塊或平台視圖的內容。

    請參閱 example/integration_test 目錄中的範例。

  • 原生單元測試。 就像 Dart 單元測試可以隔離測試外掛程式的 Dart 部分一樣,原生單元測試可以隔離測試原生部分。每個平台都有自己的原生單元測試系統,並且測試是用與其測試的程式碼相同的原生語言編寫的。

    如果您需要模擬由外掛程式碼包裝的 API(這在 Dart 整合測試中是不可能的),則原生單元測試可能特別有價值。

    您可以為每個平台設定和使用您熟悉的所有原生測試框架,但下列框架已在外掛程式範本中設定

    • AndroidJUnit 測試可以在 android/src/test/ 中找到。

    • iOSmacOSXCTest 測試分別可以在 example/ios/RunnerTests/example/macos/RunnerTests/ 中找到。它們位於範例目錄中,而不是頂層套件目錄中,因為它們是透過範例應用程式的專案執行的。

    • LinuxWindowsGoogleTest 測試分別可以在 linux/test/windows/test/ 中找到。

其他類型的測試(目前未在範本中預先設定)是原生 UI 測試。在原生 UI 測試框架(例如 EspressoXCUITest)下執行您的應用程式,可以啟用與原生和 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

如果您是以發行模式而不是偵錯模式建置範例應用程式,請將「debug」取代為「release」。

Windows GoogleTest

如果您已在 Visual Studio 中開啟範例應用程式,則可以使用Visual Studio 測試 UI來執行單元測試。

若要從命令列執行測試,請在範例目錄中使用下列命令,並將「my_plugin」取代為您的外掛程式專案名稱

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

如果您是以發行模式而不是偵錯模式建置範例應用程式,請將「Debug」取代為「Release」。

要新增哪種類型的測試

#

適用於測試 Flutter 專案的一般建議也適用於外掛程式。外掛程式測試的一些額外注意事項

  • 由於只有整合測試可以測試 Dart 和原生語言之間的通訊,請嘗試為每個平台通道呼叫至少進行一次整合測試。

  • 如果某些流程無法使用整合測試進行測試(例如,如果它們需要與原生 UI 互動或模擬裝置狀態),請考慮使用單元測試來撰寫兩個半部的「端對端」測試

    • 原生單元測試,設定必要的模擬,然後使用合成呼叫呼叫方法通道進入點,並驗證方法回應。

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