Skip to main content

测试插件

所有Flutter 测试的常用类型 也适用于插件包,但由于插件包含原生代码,因此它们通常还需要其他类型的测试来测试其所有功能。

插件测试类型

#

要查看每种测试类型的示例,您可以从插件模板创建一个新插件,并在指示的目录中查看。

  • Dart 单元测试widget 测试。这些测试允许您像测试非插件包的 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 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 并验证结果。