Flutter代码覆盖率统计插件coverage_util的使用

Flutter代码覆盖率统计插件coverage_util的使用

描述

该插件用于收集项目测试覆盖率的准确数据。

在计算覆盖率时,Codecov 只会分析那些被导入或导出到我们正在测试的文件中的文件。因此可能会出现某些功能未被测试但不会影响覆盖率百分比的情况,从而导致获取不准确的数据。

此插件将所有以 .dart 结尾的文件合并为一个文件,并将其添加到测试目录中。

异常情况:

  • 包含 main 函数的文件;
  • 作为其他文件一部分(如 part of)的文件;
  • 导出其他文件的文件;
  • 包含 .g. 的生成文件。

注意:默认情况下,由 freezed 生成的文件在计算测试覆盖率时不被考虑。

如果有一些文件由于某些原因不应被纳入计算,可以在文件中加入以下注释:

// coverage:ignore-file

然后运行命令 flutter test --coverage 来生成 lcov 文件,并将其转换为 HTML 格式,您可以自行打开并查看项目的测试覆盖率百分比。

为了成功进行转换,您需要安装 LCOV。如果您使用的是 brew,可以使用以下命令:

brew install lcov

要启动该工具,请先运行以下命令:

flutter pub global activate coverage_util

接下来运行:

flutter pub global run coverage_util

完整示例 Demo

假设我们有一个简单的 Flutter 应用程序,包含两个 Dart 文件:main.dartutils.dart。我们将使用 coverage_util 插件来计算覆盖率。

文件结构

my_flutter_project/
├── lib/
│   ├── main.dart
│   └── utils.dart
├── test/
└── pubspec.yaml

lib/main.dart

import 'package:flutter/material.dart';
import './utils.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Coverage Test')),
        body: Center(child: Text('Hello World')),
      ),
    );
  }
}

// coverage:ignore-start
void someIgnoredFunction() {
  print('This function is ignored');
}
// coverage:ignore-end

lib/utils.dart

void anotherFunction() {
  print('Another function');
}

运行覆盖率测试

  1. 确保已安装 LCOV:
brew install lcov
  1. 激活 coverage_util
flutter pub global activate coverage_util
  1. 运行测试覆盖率:
flutter test --coverage
  1. 将生成的 lcov 文件转换为 HTML:
flutter pub global run coverage_util
  1. 打开生成的 HTML 文件以查看覆盖率报告:
open coverage/lcov-report/index.html

更多关于Flutter代码覆盖率统计插件coverage_util的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter代码覆盖率统计插件coverage_util的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


coverage_util 是一个用于 Flutter 项目的代码覆盖率统计工具。它可以帮助开发者生成和分析代码覆盖率报告,以确保代码被充分测试。以下是如何使用 coverage_util 插件的详细步骤:

1. 安装 coverage_util 插件

首先,你需要在 pubspec.yaml 文件中添加 coverage_util 依赖:

dev_dependencies:
  flutter_test:
    sdk: flutter
  coverage_util: ^1.0.0

然后运行 flutter pub get 来获取依赖。

2. 运行测试并生成覆盖率数据

在项目根目录下运行以下命令来运行测试并生成覆盖率数据:

flutter test --coverage

这将在项目根目录下生成一个 coverage 文件夹,其中包含原始的覆盖率数据文件 lcov.info

3. 使用 coverage_util 生成报告

coverage_util 可以帮助你生成更易读的覆盖率报告。运行以下命令来生成 HTML 格式的覆盖率报告:

flutter pub run coverage_util:report --input=coverage/lcov.info --output=coverage_report --format=html

这将在 coverage_report 文件夹中生成 HTML 格式的覆盖率报告。

4. 查看覆盖率报告

生成的 HTML 报告可以通过浏览器查看。打开 coverage_report/index.html 文件,你将看到详细的代码覆盖率信息。

5. 分析覆盖率报告

通过查看 HTML 报告,你可以了解哪些代码被测试覆盖,哪些代码没有被覆盖。这有助于你识别测试的薄弱环节,并编写更多的测试用例来提高覆盖率。

6. 集成到 CI/CD 流程中

你可以将代码覆盖率统计集成到持续集成(CI)流程中。例如,在 GitHub Actions 或 GitLab CI 中,你可以在测试步骤之后运行 coverage_util 来生成并上传覆盖率报告。

7. 其他格式的报告

除了 HTML 格式,coverage_util 还支持其他格式的报告,如 JSON 和 CSV。你可以通过 --format 参数指定输出格式:

flutter pub run coverage_util:report --input=coverage/lcov.info --output=coverage_report --format=json

8. 设置覆盖率阈值

你还可以设置覆盖率阈值,以确保测试覆盖率不低于某个百分比。如果覆盖率低于阈值,构建将失败。你可以通过以下命令设置阈值:

flutter pub run coverage_util:check --input=coverage/lcov.info --threshold=80
回到顶部