跳到主內容

測試外掛

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

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

外掛測試型別

#

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

  • Dart 單元測試元件測試。這些測試允許你像測試非外掛包的 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 並驗證結果。