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

外掛測試的型別

#

要檢視每種測試型別的示例,您可以 從外掛模板建立新外掛,並在指定的目錄中查詢。

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

    有關示例,請參閱 test 目錄。

  • Dart 整合測試。由於整合測試在 Flutter 應用(示例應用)的上下文中執行,因此它們可以測試 Dart 和原生程式碼以及它們之間的互動。它們也適用於測試需要在瀏覽器中執行的 Web 實現程式碼。

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

    有關示例,請參閱 example/integration_test 目錄。

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

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

    您可以設定並使用您熟悉的每個平臺的任何原生測試框架,但外掛模板中已配置以下內容:

    • Android:可以在 android/src/test/ 中找到 JUnit 測試。

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

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

模板中當前未預先配置的其他型別的測試是原生 UI 測試。在原生 UI 測試框架(如 EspressoXCUITest)下執行您的應用,可以對同時與原生和 Flutter UI 元素進行互動的測試進行執行,因此如果您的外掛在沒有原生 UI 互動的情況下無法進行測試,可能會很有用。

執行測試

#

Dart 單元測試

#

這些測試可以像任何其他 Flutter 單元測試一樣執行,無論是從您喜歡的 Flutter IDE 執行,還是使用 flutter test 命令執行。

整合測試

#

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

原生單元測試

#

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

Android JUnit

如果以 Android 專案的形式在 Android Studio 中打開了示例,則可以使用 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 和原生語言之間的通訊,因此請嘗試為每個平臺通道呼叫至少編寫一個整合測試。

  • 如果某些流程無法使用整合測試進行測試(例如,如果它們需要與原生 UI 互動或模擬裝置狀態),請考慮使用單元測試編寫兩種部分之間的“端到端”測試。

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

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