测试插件
所有 常见的 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 并验证结果。
-