測試外掛
瞭解如何測試你的外掛包。
所有 常用的 Flutter 測試型別 也適用於外掛包,但由於外掛包含原生程式碼,它們通常還需要其他型別的測試來測試所有功能。
外掛測試型別
#要檢視這些型別的測試示例,你可以 從外掛模板建立一個新的外掛 並檢視指示的目錄。
-
Dart 單元測試 和 元件測試。這些測試允許你像測試非外掛包的 Dart 程式碼一樣測試外掛的 Dart 部分。但是,外掛的原生程式碼 不會載入,因此任何對平臺通道的呼叫都需要在測試中 進行模擬。
請參閱
test目錄中的示例。 -
Dart 整合測試。由於整合測試在 Flutter 應用程式的上下文中執行(示例應用程式),因此它們可以測試 Dart 和原生程式碼,以及它們之間的互動。它們也適用於單元測試需要在瀏覽器中執行的 Web 實現程式碼。
這些通常是外掛最重要的測試。但是,Dart 整合測試無法與原生 UI 互動,例如原生對話方塊或平臺檢視的內容。
請參閱
example/integration_test目錄中的示例。 -
原生單元測試。 就像 Dart 單元測試可以隔離測試外掛的 Dart 部分一樣,原生單元測試可以隔離測試原生部分。每個平臺都有自己的原生單元測試系統,並且測試是用與正在測試的程式碼相同的原生語言編寫的。
如果你需要模擬由你的外掛程式碼包裝的 API,而這在 Dart 整合測試中是不可能的,那麼原生單元測試可能特別有價值。
你可以為每個平臺設定並使用你熟悉的任何原生測試框架,但以下框架已在外掛模板中配置
Android:JUnit 測試可以在
android/src/test/中找到。iOS 和 macOS:XCTest 測試可以在
example/ios/RunnerTests/和example/macos/RunnerTests/中找到,分別。這些位於示例目錄中,而不是頂級包目錄中,因為它們是透過示例應用程式的專案執行的。Linux 和 Windows:GoogleTest 測試可以在
linux/test/和windows/test/中找到,分別。
其他型別的測試,目前未在模板中預配置,是 原生 UI 測試。在原生 UI 測試框架下執行你的應用程式,例如 Espresso 或 XCUITest,可以啟用與原生和 Flutter UI 元素互動的測試,因此如果你的外掛無法在沒有原生 UI 互動的情況下進行測試,則可能很有用。
執行測試
#Dart 單元測試
#這些可以像任何其他 Flutter 單元測試一樣執行,無論是從你喜歡的 Flutter IDE 還是使用 flutter test。
整合測試
#有關執行此型別測試的資訊,請檢視 整合測試文件。命令必須在 example 目錄中執行。
原生單元測試
#對於所有平臺,在執行單元測試之前,你需要至少構建一次示例應用程式,以確保已建立所有特定於平臺的構建檔案。
Android JUnit
如果你在 Android Studio 中將示例作為 Android 專案開啟,你可以使用 Android Studio 測試 UI 執行單元測試。
要從命令列執行測試,請在 example/android 目錄中使用以下命令
./gradlew testDebugUnitTest
iOS 和 macOS XCTest
如果你在 Xcode 中打開了示例應用程式,你可以使用 Xcode 測試 UI 執行單元測試。
要從命令列執行測試,請在 example/ios(對於 iOS)或 example/macos(對於 macOS)目錄中使用以下命令
xcodebuild test -workspace Runner.xcworkspace -scheme Runner -configuration Debug
對於 iOS 測試,你可能需要先在 Xcode 中開啟 Runner.xcworkspace 以配置程式碼簽名。
Linux GoogleTest
要從命令列執行測試,請在示例目錄中使用以下命令,將“my_plugin”替換為你的外掛專案名稱
build/linux/plugins/x64/debug/my_plugin/my_plugin_test
如果你以釋出模式而不是除錯模式構建了示例應用程式,請將“debug”替換為“release”。
Windows GoogleTest
如果你在 Visual Studio 中打開了示例應用程式,你可以使用 Visual Studio 測試 UI 執行單元測試。
要從命令列執行測試,請在示例目錄中使用以下命令,將“my_plugin”替換為你的外掛專案名稱
build/windows/plugins/my_plugin/Debug/my_plugin_test.exe
如果你以釋出模式而不是除錯模式構建了示例應用程式,請將“Debug”替換為“Release”。
應該新增哪些型別的測試
#針對 Flutter 專案的一般測試建議 也適用於外掛。外掛測試的一些額外注意事項
-
由於只有整合測試才能測試 Dart 和原生語言之間的通訊,因此請嘗試對每個平臺通道呼叫至少進行一次整合測試。
-
如果某些流程無法使用整合測試進行測試——例如,如果它們需要與原生 UI 互動或模擬裝置狀態——請考慮使用單元測試編寫兩個部分“端到端”測試
原生單元測試設定必要的模擬,然後呼叫方法通道入口點並使用合成呼叫驗證方法響應。
Dart 單元測試模擬平臺通道,然後呼叫外掛的公共 API 並驗證結果。