运行 Dart 中的所有单元测试

Running all unit tests in Dart

我正在开发一个 Flutter 项目,并试图找到构建测试的最佳方式。通常,我构建测试以反映正在测试的主项目的目录结构。

lib
 |models
 |providers
   |userprovider.dart
test
 lib
   |models
   |providers
     |userproviderShould.dart  

但是,我无法确定这种方法是否不是 Dart 代码的最佳选择。测试项目中的每个文件似乎都需要有一个main方法,感觉很奇怪。我也不清楚如何 运行 整个测试套件。 Flutter 测试 运行ning (flutter test) 似乎不理解目录。 运行 flutter test test/lib/providers 不起作用,而 flutter test test/lib/providers/userproviderShould.dart 起作用。如果它不理解目录,它当然不理解必须递归到目录中。

有没有一种方法可以解决这个问题,既不需要构建一个手动包含所有其余测试的脆弱入口点,也不需要编写 shell 脚本来 运行每个文件单独?

如果您希望 flutter testpub run test 执行文件而不手动将其路径作为参数传递给命令,则文件必须:

  • /test 文件夹中
  • 其名称必须以_test.dart
  • 为后缀

任何没有这个_test的东西都不会被命令行执行

要运行项目中的所有单元测试,请在项目的根目录中在终端中键入以下命令之一:

Flutter 项目

flutter test

Dart 项目

dart test

备注

  • Dart 项目曾经是 pub run test。您可能仍然可以这样做,但 dart test 是新的方法,也更容易记住。
  • test package documentation
  • 您可能需要 运行 flutter pub getdart pub get 来检索测试包(如果您之前没有)。

使用 Flutter 2.5(也许更低,虽然我没有检查过),显然,你可以使用任何目录名称作为参数,它会 运行 所有 **/*_test.dart 个文件.

所以:flutter test lib 成功了!您可以将其他参数传递给命令,只要目录名称是最后一个参数 (flutter test --no-pub --coverage lib).

文档:https://pub.dev/packages/test#running-tests

对于命令,此处的其他答案表明您可以使用 flutter testdart test(来自@Suragch

关于您的 flutter test test/lib/providers 不起作用,请尝试改用 test/lib/providers/*,因为当我遇到类似问题时它对我有用。


如果您使用的是 VS Code,对于启动命令(通过按 F5),您可以转到 Run and debug 选项卡,然后在侧边栏的 top-right 处,单击打开 launch.json 的 gear/settings 图标,您可以在其中添加此部分:

{
  "name": "Dart: Run all tests",
  "type": "dart",
  "request": "launch",
  "program": "./test/"
},

要热键这个启动命令,只需返回 Run and debug 选项卡并在顶部使用下拉菜单 select 它的“名称”,这将设置它启动默认情况下,当您按 F5

您还可以为希望快速启动的目标测试添加更多具有不同名称和测试文件夹的部分,例如

{
  "name": "Run user tests",
  "type": "dart",
  "request": "launch",
  "program": "./test/users/"
},