Flutter代码覆盖率插件dlcov的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter代码覆盖率插件dlcov的使用

插件简介

DLCOV 是一个命令行工具,用于验证代码覆盖率阈值(适用于CI/CD、git hooks等)。它具有以下主要特性:

  • 可以在shell脚本、GitHub Actions、git hooks等中使用,如果代码覆盖率低于您设置的最小阈值,则阻止应用程序构建。
  • 包含Flutter默认不包含的文件,提高代码覆盖率阈值的准确性。
  • 通过文件名后缀、文件名中的正则表达式或文件内的内容过滤不需要的文件。
  • 记录测试日志到文件中,能够观察每次验证时代码覆盖率的增减。
  • 允许外部工具生成lcov.info文件,无需直接依赖Flutter SDK或其他技术。

使用示例

dlcov --coverage=80 --include-untested-files=true --lcov-gen="flutter test --coverage" --log=true

该命令的作用如下:

  • --coverage=80:检查代码覆盖率是否等于或大于80.0%。
  • --include-untested-files=true:生成未测试文件的引用(默认为false)。
  • --lcov-gen="flutter test --coverage":通过flutter test --coverage命令生成lcov.info文件。
  • --log=true:将每次测试覆盖率信息记录到dlcov.log文件中,最多记录1000行。

安装方法

可以通过以下两种方式安装dlcov:

全局安装

pub global activate dlcov

然后可以直接运行:

dlcov -c 80

或者使用完整路径:

pub global run dlcov -c 80

作为开发依赖添加到项目中

编辑项目的pubspec.yaml文件,在dev_dependencies部分添加:

dev_dependencies:
  dlcov: ^4.2.0

之后可以使用以下命令来检查代码覆盖率:

pub run dlcov -c 80

参数说明

长参数 短参数 是否必须 默认值 示例 描述
--coverage -c 0 80.0 最小覆盖率阈值
--log -l false true 将每次测试覆盖率信息记录到dlcov.log文件中,最多记录1000行
--include-untested-files false true 获取更真实的报告,不忽略未测试文件
--lcov-gen “flutter test --coverage” 生成lcov.info文件的命令
--exclude-suffix -e .g.dart,.freezed.dart .g.dart 根据文件名后缀排除文件
--exclude-files widget.dart,part*” 排除路径名包含特定字符串的文件
--exclude-contents “classextends StatefulWidget 排除包含特定模式的文件
--exclude-contents-path “./patterns_list.txt” 指定包含所有排除模式的文件路径

GitHub Actions集成示例

下面是一个简单的GitHub Actions工作流配置文件.github/workflows/ci.yml示例,当代码覆盖率低于80%时会终止构建流程:

name: CI

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Dart SDK
        uses: dart-lang/setup-dart@v1
        with:
          dart-version: 'stable'

      - name: Install dependencies
        run: flutter pub get

      - name: Run tests and check coverage
        run: |
          pub global activate dlcov
          dlcov --coverage=80 --include-untested-files=true --lcov-gen="flutter test --coverage"

以上就是关于Flutter代码覆盖率插件dlcov的基本介绍和使用方法。希望这些信息对您有所帮助!如果您有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter项目中使用dlcov插件来获取代码覆盖率的详细步骤和代码示例。dlcov是一个与Dart VM Service Protocol结合使用的工具,用于收集和分析Dart代码覆盖率数据。需要注意的是,dlcov并不是Flutter官方直接支持的插件,但可以通过集成Dart VM Service Protocol来实现类似功能。因此,这里我们将介绍如何手动配置和使用Dart VM Service Protocol结合一些工具来收集覆盖率数据。

步骤 1: 设置Flutter项目

首先,确保你的Flutter项目已经设置好并且可以正常运行测试。

步骤 2: 添加依赖

虽然dlcov不是直接的Flutter插件,但我们可以使用Dart的test_coverage包来收集覆盖率数据。首先,在pubspec.yaml文件中添加test_coverage依赖:

dev_dependencies:
  test: ^1.16.0 # 确保使用支持覆盖率的test包版本
  test_coverage: ^0.5.0 # 添加test_coverage依赖

然后运行flutter pub get来安装依赖。

步骤 3: 配置测试脚本

接下来,我们需要配置一个脚本来运行测试并收集覆盖率数据。在pubspec.yaml文件中,添加一个自定义的脚本命令:

scripts:
  collect_coverage: "dart --enable-vm-service:5055 run test/all_tests.dart && wait-for-dart-vm-service:5055 && gen_coverage --report-on lib --subpackages --in=coverage/json --out=coverage/report --report-type=html"

注意:上面的命令使用了wait-for-dart-vm-servicegen_coverage这两个工具,它们需要单独安装。你可以通过Dart的包管理工具pub全局安装它们:

dart pub global activate wait_for_dart_vm_service
dart pub global activate coverage

确保你的PATH环境变量包含了Dart的bin目录,这样你就可以全局使用这些工具了。

步骤 4: 编写测试

确保你的测试文件位于test/目录下,并且测试代码能够正常运行。例如,一个简单的测试可能如下所示:

// test/example_test.dart
import 'package:test/test.dart';

void main() {
  test('adds one to input values', () {
    expect(1 + 1, equals(2));
  });
}

步骤 5: 运行覆盖率收集脚本

现在,你可以运行之前配置的脚本来收集覆盖率数据:

flutter pub run collect_coverage

这个命令会启动Dart VM服务,运行测试,等待服务启动,然后生成覆盖率报告。生成的HTML报告将位于coverage/report目录下,你可以在浏览器中打开它查看详细的覆盖率信息。

注意

  • 上述方法使用了wait_for_dart_vm_servicecoverage工具,这些工具并不是Flutter官方工具,但它们在Dart社区中广泛使用。
  • 确保Dart和Flutter环境配置正确,以便这些工具能够正常工作。
  • 覆盖率报告可能会因为测试运行的方式(如异步代码、隔离环境等)而有所不同,确保你的测试覆盖了所有需要分析的代码路径。

通过上述步骤,你应该能够在Flutter项目中收集并分析代码覆盖率数据。虽然这里没有直接使用dlcov,但提供的方法达到了类似的效果,并且更加符合Dart和Flutter社区的当前实践。

回到顶部