跳到主要内容

Dart 测试

软件测试是应用开发的重要组成部分,有助于在发布应用之前验证其是否正常工作。本 Dart 测试指南概述了几种类型的测试,并指引您了解如何测试 FlutterWeb 以及服务器端应用和脚本

您可以使用 dart test 命令(对于 Flutter 应用,则使用 flutter test)在命令行上运行测试。

测试的种类

#

Dart 测试文档重点介绍了您可能熟悉的多种测试中的三种:单元测试、组件测试和端到端测试(一种集成测试)。测试术语各不相同,但这些是您在使用 Dart 技术时可能会遇到的术语和概念

  • 单元测试专注于验证最小的可测试软件单元,例如函数、方法或类。您的测试套件应包含比其他类型更多的单元测试。

  • 组件测试(在 Flutter 中称为 Widget 测试)验证组件(通常由多个类组成)的行为是否符合预期。组件测试通常需要使用模拟对象 (mock object),这些模拟对象可以模仿用户操作、事件、执行布局以及实例化子组件。

  • 集成测试和端到端测试验证整个应用或应用的大部分行为。集成测试通常在模拟或真实设备上运行,或者在浏览器中运行(针对 Web 应用),由两部分组成:应用本身,以及驱动应用运行的测试应用。集成测试通常会测量性能,因此测试应用通常在与被测应用不同的设备或操作系统上运行。

常用的库

#

尽管您的测试部分取决于代码的目标平台——例如 Flutter、Web 或服务器端——但以下包在所有 Dart 平台中都很有用

  • package:test
    提供了一种在 Dart 中编写测试的标准方式。您可以使用 test 包来:

    • 编写单个测试或测试组。
    • 使用 @TestOn 注解限制测试在特定环境中运行。
    • 像编写同步测试一样编写异步测试。
    • 使用 @Tag 注解为测试打标签。例如,定义一个标签来为某些测试创建自定义配置,或标记某些测试需要更长时间完成。
    • 创建 dart_test.yaml 文件来配置跨多个文件或整个包的标签测试。
  • package:mockito
    提供一种创建模拟对象 (mock object) 的方式,这些对象可以轻松配置用于固定场景,并验证被测系统与模拟对象交互的方式是否符合预期。有关同时使用 package:test 和 package:mockito 的示例,请参阅 mockito 包中的国际空间站 API 库及其单元测试

Flutter 测试

#

使用以下资源了解更多关于测试 Flutter 应用的信息

其他工具和资源

#

您可能还会发现以下资源对于开发和调试 Dart 应用很有用。

IDE

#

当谈到调试时,您的第一道防线是您的 IDE。许多常用 IDE 都有 Dart 插件。

Dart DevTools

#

Dart DevTools 是一套用于 Dart 和 Flutter 的性能工具。详情请参阅Dart DevTools 文档。

持续集成

#

考虑使用持续集成 (CI) 在每次提交后构建您的项目并运行其测试。GitHub 的两个 CI 服务是 GitHub ActionsAppVeyor

了解更多关于 GitHub Actions 的信息

  • Dart 团队提供的许多包都使用 GitHub Actions。例如,请参阅 markdown 包仓库中的 markdown.yaml。要了解该仓库如何从 Travis CI 迁移到 GitHub Actions,请查看 PR #353