运行 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 test
或 pub run test
执行文件而不手动将其路径作为参数传递给命令,则文件必须:
- 在
/test
文件夹中
- 其名称必须以
_test.dart
为后缀
任何没有这个_test
的东西都不会被命令行执行
要运行项目中的所有单元测试,请在项目的根目录中在终端中键入以下命令之一:
Flutter 项目
flutter test
Dart 项目
dart test
备注
- Dart 项目曾经是
pub run test
。您可能仍然可以这样做,但 dart test
是新的方法,也更容易记住。
- test package documentation
- 您可能需要 运行
flutter pub get
或 dart pub get
来检索测试包(如果您之前没有)。
使用 Flutter 2.5(也许更低,虽然我没有检查过),显然,你可以使用任何目录名称作为参数,它会 运行 所有 **/*_test.dart
个文件.
所以:flutter test lib
成功了!您可以将其他参数传递给命令,只要目录名称是最后一个参数 (flutter test --no-pub --coverage lib
).
对于命令,此处的其他答案表明您可以使用 flutter test
和 dart 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/"
},
我正在开发一个 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 test
或 pub run test
执行文件而不手动将其路径作为参数传递给命令,则文件必须:
- 在
/test
文件夹中 - 其名称必须以
_test.dart
为后缀
任何没有这个_test
的东西都不会被命令行执行
要运行项目中的所有单元测试,请在项目的根目录中在终端中键入以下命令之一:
Flutter 项目
flutter test
Dart 项目
dart test
备注
- Dart 项目曾经是
pub run test
。您可能仍然可以这样做,但dart test
是新的方法,也更容易记住。 - test package documentation
- 您可能需要 运行
flutter pub get
或dart pub get
来检索测试包(如果您之前没有)。
使用 Flutter 2.5(也许更低,虽然我没有检查过),显然,你可以使用任何目录名称作为参数,它会 运行 所有 **/*_test.dart
个文件.
所以:flutter test lib
成功了!您可以将其他参数传递给命令,只要目录名称是最后一个参数 (flutter test --no-pub --coverage lib
).
对于命令,此处的其他答案表明您可以使用 flutter test
和 dart 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/"
},