Flutter测试覆盖率控制台输出插件test_cov_console的使用
Flutter测试覆盖率控制台输出插件test_cov_console的使用
简介
test_cov_console
是一个小型的 Dart 工具,用于生成 Flutter 测试覆盖率报告并将其输出到控制台。这可以帮助开发者快速了解项目的测试覆盖情况,从而提高代码质量和可靠性。
安装方法
在 pubspec.yaml
文件中添加以下依赖(并运行隐式的 flutter pub get
):
dev_dependencies:
test_cov_console: ^0.2.2
然后执行以下命令以确保所有 Flutter 库是最新的:
flutter pub get
使用步骤
1. 生成 lcov.info 文件
首先,运行以下命令以生成 coverage/lcov.info
文件:
flutter test --coverage
该命令会执行所有的单元测试,并生成测试覆盖率数据文件 lcov.info
。
2. 生成控制台报告
接下来,使用 test_cov_console
插件来生成控制台报告:
flutter pub run test_cov_console
示例输出如下:
---------------------------------------------|---------|---------|---------|-------------------|
File |% Branch | % Funcs | % Lines | Uncovered Line #s |
---------------------------------------------|---------|---------|---------|-------------------|
lib/src/ | | | | |
print_cov.dart | 100.00 | 100.00 | 88.37 |...,149,205,206,207|
print_cov_constants.dart | 0.00 | 0.00 | 0.00 | no unit testing|
lib/ | | | | |
test_cov_console.dart | 0.00 | 0.00 | 0.00 | no unit testing|
---------------------------------------------|---------|---------|---------|-------------------|
All files with unit testing | 100.00 | 100.00 | 88.37 | |
---------------------------------------------|---------|---------|---------|-------------------|
可选参数
test_cov_console
支持多个可选参数来自定义报告输出:
-f, --file=<FILE>
:指定要报告的目标lcov.info
文件,默认为coverage/lcov.info
。-e, --exclude=<STRING1,STRING2,...>
:排除不包含单元测试的文件。-l, --line
:仅打印行覆盖率和未覆盖的行号,不打印分支和函数覆盖率。-i, --ignore
:不打印任何没有单元测试的文件。-m, --multi
:从多个lcov.info
文件生成报告。-c, --csv
:将输出保存为 CSV 文件。-o, --output=<CSV-FILE>
:指定 CSV 文件的完整路径,默认为coverage/test_cov_console.csv
。-t, --total
:仅打印总覆盖率,忽略其他选项。-p, --pass=<MINIMUM>
:仅打印总覆盖率是否达到最小值,大于等于最小值时输出PASSED
,否则输出FAILED
。-h, --help
:显示帮助信息。
示例:带参数运行工具
flutter pub run test_cov_console --file=coverage/lcov.info --exclude=_constants,_mock
多个 lcov.info
文件的报告
支持从多个 lcov.info
文件生成报告。目录结构可以是:
-
无根模块
<root>/<module_a> <root>/<module_a>/coverage/lcov.info <root>/<module_a>/lib/src <root>/<module_b> <root>/<module_b>/coverage/lcov.info <root>/<module_b>/lib/src ...
-
有根模块
<root>/coverage/lcov.info <root>/lib/src <root>/<module_a> <root>/<module_a>/coverage/lcov.info <root>/<module_a>/lib/src <root>/<module_b> <root>/<module_b>/coverage/lcov.info <root>/<module_b>/lib/src ...
必须在 <root>
目录下运行 test_cov_console
,并且报告会按模块分组。例如:
flutter pub run test_cov_console --file=coverage/lcov.info --exclude=_constants,_mock --multi
输出为 CSV 文件
可以将报告输出为 CSV 文件:
flutter pub run test_cov_console -c --output=coverage/test_coverage.csv
样本 CSV 输出文件:
File,% Branch,% Funcs,% Lines,Uncovered Line #s
lib/,,,,
test_cov_console.dart,0.00,0.00,0.00,no unit testing
lib/src/,,,,
parser.dart,100.00,100.00,97.22,"97"
parser_constants.dart,100.00,100.00,100.00,""
print_cov.dart,100.00,100.00,82.91,"29,49,51,52,171,174,177,180,183,184,185,186,187,188,279,324,325,387,388,389,390,391,392,393,394,395,398"
print_cov_constants.dart,0.00,0.00,0.00,no unit testing
All files with unit testing,100.00,100.00,86.07,""
示例项目
以下是一个简单的 Flutter 示例项目,展示了如何结合 test_cov_console
使用:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
通过上述步骤和示例,您可以轻松地集成 test_cov_console
到您的 Flutter 项目中,并生成详细的测试覆盖率报告。希望这些信息对您有所帮助!
更多关于Flutter测试覆盖率控制台输出插件test_cov_console的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter测试覆盖率控制台输出插件test_cov_console的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用test_cov_console
插件来输出测试覆盖率的控制台信息的示例代码和步骤。test_cov_console
是一个用于在Flutter项目中生成和打印测试覆盖率报告的插件。
步骤 1: 添加依赖
首先,你需要在pubspec.yaml
文件中添加test_coverage
和test_cov_console
的依赖。
dev_dependencies:
test_coverage: ^0.x.x # 请使用最新版本号
test_cov_console: ^0.x.x # 请使用最新版本号
运行flutter pub get
来安装这些依赖。
步骤 2: 配置测试脚本
在你的pubspec.yaml
文件中,添加一个自定义的脚本用于运行测试并生成覆盖率报告。例如:
scripts:
test_with_coverage: flutter test --coverage && gen_coverage_report --report-on lib --console
这里,gen_coverage_report
是test_coverage
包提供的一个命令行工具,--report-on lib
指定了需要生成覆盖率报告的目录,--console
选项用于在控制台输出覆盖率报告。
步骤 3: 创建覆盖率生成脚本
由于test_cov_console
依赖于test_coverage
生成的覆盖率数据,你需要在项目根目录下创建一个脚本来调用这些工具。假设你使用的是Linux或macOS,你可以创建一个名为gen_coverage_report
的Shell脚本(对于Windows,可以创建一个批处理脚本)。
Shell脚本示例(gen_coverage_report
)
#!/bin/bash
# 检查是否提供了report-on参数
REPORT_ON=""
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
--report-on)
REPORT_ON="$2"
shift # past argument
;;
--console)
CONSOLE=true
;;
*)
# unknown option
;;
esac
shift # past argument or option
done
# 生成覆盖率数据
flutter test --coverage
# 检查覆盖率数据是否存在
if [ ! -f coverage/lcov.info ]; then
echo "Coverage data not found. Run 'flutter test --coverage' first."
exit 1
fi
# 使用test_coverage生成报告
dart run test_coverage format_coverage --in=coverage/lcov.info --out=coverage/report.json --packages=.dart_tool/package_config.json --report-on="$REPORT_ON"
# 使用test_cov_console输出控制台报告(如果指定了--console选项)
if [ -n "$CONSOLE" ]; then
dart run test_cov_console report --coverage=coverage/report.json
fi
确保脚本具有执行权限:
chmod +x gen_coverage_report
步骤 4: 运行测试并生成覆盖率报告
现在,你可以使用以下命令来运行测试并生成覆盖率报告:
flutter pub run-script test_with_coverage
这将执行以下步骤:
- 运行
flutter test --coverage
生成覆盖率数据。 - 使用
test_coverage
格式化覆盖率数据。 - 如果指定了
--console
选项,使用test_cov_console
在控制台输出覆盖率报告。
注意事项
- 确保你的Flutter环境已经正确配置。
- 检查
test_coverage
和test_cov_console
的最新版本,因为插件的API可能会随着版本更新而变化。 - 根据你的操作系统调整脚本路径和权限设置。
通过以上步骤,你应该能够在Flutter项目中成功集成并使用test_cov_console
插件来输出测试覆盖率的控制台信息。