Flutter代码覆盖率分析插件code_coverage的使用
Flutter代码覆盖率分析插件code_coverage的使用
代码覆盖率 (Code Coverage)
code_coverage
是一个命令行应用和包,用于Dart应用程序的代码覆盖率报告。
命令行界面 (CLI)
使用方法 (Usage)
安装完成后,你可以在你的包的基本目录下运行 code_coverage
。输出结果将类似于以下内容:
Running package tests...
┌────────────────────┬────────────┬───────────────────┐
│ File │ Coverage % │ Uncovered Lines │
├────────────────────┼────────────┼───────────────────┤
│ All covered files │ 45.83 │ │
│ src/utils.dart │ 52.38 │ 38-42, 44, 48-51 │
│ src/constants.dart │ 0.00 │ 3-5 │
└────────────────────┴────────────┴───────────────────┘
18.18% (2/11) of all files were covered
如上所示,命令行工具会运行你的包的测试,并输出一个表格,显示哪些文件被覆盖以及覆盖了多少。
配置 (Configuration)
这些选项和标志可用于配置覆盖率报告:
- –showOutput, -o:此选项将显示
dart test
的输出,因此总输出将类似于以下内容:
Running package tests...
00:00 +0: test\utils_test.dart: should concatenate small group of lines as a range
00:00 +1: test\utils_test.dart: should concatenate medium group of lines as a range
00:00 +2: test\utils_test.dart: should concatenate two lines as separate
00:00 +3: test\utils_test.dart: should concatenate lines as range and separate
00:00 +4: test\utils_test.dart: should concatenate lines with a range followed by another range
00:00 +5: test\utils_test.dart: should concatenate lines as two ranges and two separate
00:03 +6: All tests passed!
┌───────────────────┬────────────┬──────────────────┐
│ File │ Coverage % │ Uncovered Lines │
├───────────────────┼────────────┼──────────────────┤
│ All covered files │ 45.83 │ │
| src | 45.83 | |
│ utils.dart │ 52.38 │ 38-42, 44, 48-51 │
│ constants.dart │ 0.00 │ 3-5 │
└───────────────────┴────────────┴──────────────────┘
18.18% (2/11) of all files were covered
- –showUncovered, -u:此选项将显示未覆盖文件的列表,这将看起来像这样:
Running package tests...
┌───────────────────┬────────────┬─────────────────┐
│ File │ Coverage % │ Uncovered Lines │
├───────────────────┼────────────┼─────────────────┤
│ All covered files │ 80.00 │ │
│ a.dart │ 80.00 │ 20-21 │
└───────────────────┴────────────┴─────────────────┘
50.00% (1/2) of all files were covered
Uncovered files:
- b.dart
-
–packageDir, -d:使用此选项可以指定要测试的包的目录;
-
–minimum, -m:此选项允许你要求最小的代码覆盖率,如果行或文件覆盖率未达到指定值,则进程将以退出码1退出;
-
–include, -i:允许你指定多个正则表达式,这些正则表达式将与所有路径匹配,那些匹配任何正则表达式的路径将包含在报告中。例如,使用正则表达式
utils
,输出将如下所示:
Running package tests...
┌────────────────────┬────────────┬──────────────────┐
│ File │ Coverage % │ Uncovered Lines │
├────────────────────┼────────────┼──────────────────┤
│ All covered files │ 52.38 │ │
│ src/utils.dart │ 52.38 │ 38-42, 44, 48-51 │
└────────────────────┴────────────┴──────────────────┘
100% (1/1) of all files were covered
- –exclude, -e:允许你指定多个正则表达式,这些正则表达式将与所有路径匹配,那些不匹配所有正则表达式的路径将包含在报告中。例如,使用正则表达式
utils
,输出将如下所示:
┌────────────────────┬────────────┬─────────────────┐
│ File │ Coverage % │ Uncovered Lines │
├────────────────────┼────────────┼─────────────────┤
│ All covered files │ 0.00 │ │
│ src/constants.dart │ 0.00 │ 3-5 │
└────────────────────┴────────────┴─────────────────┘
20% (2/10) of all files were covered
-
–ignoreBarrelFiles:在创建代码覆盖率报告时忽略筒仓文件;
-
–inlineFiles:打印文件路径在一个单行中,而不通过文件夹分离文件。示例输出:
Running package tests...
┌────────────────────┬────────────┬──────────────────┐
│ File │ Coverage % │ Uncovered Lines │
├────────────────────┼────────────┼──────────────────┤
│ All covered files │ 45.83 │ │
| src/utils.dart │ 52.38 │ 38-42, 44, 48-51 │
│ src/constants.dart │ 0.00 │ 3-5 │
└────────────────────┴────────────┴──────────────────┘
18.18% (2/11) of all files were covered
更多关于Flutter代码覆盖率分析插件code_coverage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter代码覆盖率分析插件code_coverage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用code_coverage
插件进行代码覆盖率分析的步骤,包括相关的代码和配置示例。
1. 添加依赖
首先,确保你的Flutter项目已经配置好基本的pubspec.yaml
文件。然后,在项目的根目录下的dev_dependencies
中添加flutter_test
和coverage
包(尽管flutter_test
是默认包含的,但这里为了完整性还是列出)。
dev_dependencies:
flutter_test:
sdk: flutter
coverage: ^1.0.3 # 请检查最新版本号
2. 配置test
命令
为了生成覆盖率报告,我们需要自定义Flutter的测试命令。在pubspec.yaml
文件中,添加以下脚本配置:
scripts:
test-with-coverage: >-
flutter test --coverage &&
genhtml coverage/lcov.info -o coverage/html &&
open coverage/html/index.html
这个脚本做了以下几件事:
- 运行Flutter测试并生成覆盖率数据。
- 使用
genhtml
工具(来自lcov
包,通常需要单独安装)将覆盖率数据转换为HTML格式。 - 打开生成的HTML覆盖率报告。
注意:open
命令在Windows上可能不起作用,你可能需要手动打开生成的HTML文件。此外,genhtml
工具可能需要通过安装lcov
来获取。
3. 安装lcov
在macOS上,你可以通过Homebrew安装lcov
:
brew install lcov
在Ubuntu上,你可以通过APT安装:
sudo apt-get install lcov
在Windows上,你可能需要查找相应的安装方法或使用WSL(Windows Subsystem for Linux)。
4. 运行测试并生成覆盖率报告
在终端中,运行以下命令来执行测试并生成覆盖率报告:
flutter pub get
flutter pub run test:test-with-coverage
这将执行测试,生成覆盖率数据,将其转换为HTML格式,并在默认浏览器中打开覆盖率报告。
5. 查看覆盖率报告
打开的HTML文件将显示你的Flutter项目的代码覆盖率报告。你可以看到哪些代码行被测试覆盖,哪些没有被覆盖。
示例代码
假设你有一个简单的Flutter项目,并且你想测试以下Widget:
// my_widget.dart
import 'package:flutter/material.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Text('Hello, Flutter!'),
);
}
}
你可以编写一个测试来覆盖这个Widget:
// my_widget_test.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';
import 'my_widget.dart';
void main() {
testWidgets('MyWidget renders correctly', (WidgetTester tester) async {
await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: MyWidget(),
),
));
expect(find.text('Hello, Flutter!'), findsOneWidget);
});
}
运行上述的test-with-coverage
脚本,你将看到包括my_widget.dart
在内的代码覆盖率报告。
总结
通过上述步骤,你可以在Flutter项目中集成代码覆盖率分析,并使用生成的HTML报告来识别哪些代码被测试覆盖,哪些没有。这对于确保你的应用程序具有高质量的测试覆盖非常有帮助。