测试插件
了解如何测试你的插件 package。
所有 常见的 Flutter 测试类型 也适用于插件 package,但由于插件包含原生代码,通常还需要其他类型的测试来测试其全部功能。
插件测试类型
#要查看每类测试的示例,你可以 从插件模板创建新插件 并查看指定目录。
-
Dart 单元测试 和 widget 测试。这些测试让你测试插件的 Dart 部分,就像测试非插件 package 的 Dart 代码一样。不过,插件的原生代码 不会被加载,因此对平台通道的任何调用都需要在测试中 mock。
请参阅
test目录中的示例。 -
Dart 集成测试。由于集成测试在 Flutter 应用(示例应用)的上下文中运行,它们可以测试 Dart 与原生代码,以及两者之间的交互。它们也适用于对需要在浏览器中运行的 Web 实现代码进行单元测试。
这些通常是插件最重要的测试。不过,使用
integration_test的 Dart 集成测试无法与原生 UI 交互,例如原生对话框或 platform view 的内容。如需原生组件交互支持,可考虑使用patrol请参阅
example/integration_test目录中的示例。 -
原生单元测试。 正如 Dart 单元测试可以隔离测试插件的 Dart 部分,原生单元测试可以隔离测试原生部分。每个平台都有自己的原生单元测试系统,测试使用与被测代码相同的原生语言编写。
如果你需要 mock 插件代码封装的 API,这在 Dart 集成测试中无法实现,原生单元测试尤其有价值。
你可以为每个平台设置并使用你熟悉的任何原生测试框架,但以下已在插件模板中配置:
Android: JUnit 测试位于
android/src/test/。iOS 和 macOS: XCTest 测试分别位于
example/ios/RunnerTests/和example/macos/RunnerTests/。这些位于示例目录,而非顶层 package 目录,因为它们通过示例应用的项目运行。Linux 和 Windows: GoogleTest 测试分别位于
linux/test/和windows/test/。
模板中当前未预配置的其他测试类型是 原生 UI 测试。在原生 UI 测试框架下运行应用,例如 Espresso 或 XCUITest,可实现与原生和 Flutter UI 元素交互的测试,因此若插件无法在没有原生 UI 交互的情况下测试,这会很有用。
运行测试
#Dart 单元测试
#
这些可以像任何其他 Flutter 单元测试一样运行,在你首选的 Flutter IDE 中,或使用 flutter test。
集成测试
#
有关运行此类测试的信息,请参阅
集成测试文档。命令必须在 example 目录中运行。
原生单元测试
#对于所有平台,你需要在运行单元测试前至少构建一次示例应用,以确保所有平台特定的构建文件已创建。
Android JUnit
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
Linux GoogleTest
要从命令行运行测试,在示例目录中使用以下命令,将 "my_plugin" 替换为你的插件项目名称:
build/linux/plugins/x64/debug/my_plugin/my_plugin_test
如果你以 release 模式而非 debug 模式构建示例应用,将 "debug" 替换为 "release"。
Windows GoogleTest
Windows GoogleTest
如果你在 Visual Studio 中打开了示例应用,可以使用 Visual Studio 测试 UI 运行单元测试。
要从命令行运行测试,在示例目录中使用以下命令,将 "my_plugin" 替换为你的插件项目名称:
build/windows/plugins/my_plugin/Debug/my_plugin_test.exe
如果你以 release 模式而非 debug 模式构建示例应用,将 "Debug" 替换为 "Release"。
应添加哪些类型的测试
#测试 Flutter 项目的一般建议 也适用于插件。插件测试的一些额外考虑:
-
由于只有集成测试可以测试 Dart 与原生语言之间的通信,请尽量为每个平台通道调用至少编写一个集成测试。
-
如果某些流程无法使用
integration_testpackage 测试(例如需要与原生 UI 交互或 mock 设备状态),可考虑使用patrolpackage 进行原生 UI 交互,或使用单元测试为两半编写「端到端」测试:设置必要 mock 的原生单元测试,然后通过合成的调用调用 method channel 入口点并验证方法响应。
mock 平台通道的 Dart 单元测试,然后调用插件的公共 API 并验证结果。
除非另有说明,本文档之所提及适用于 Flutter 3.44.0 版本。本页面最后更新时间:2026-06-22。查看文档源码 或者 为本页面内容提出建议。