Flutter测试覆盖率控制台输出插件test_cov_console的使用

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

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 文件生成报告。目录结构可以是:

  1. 无根模块

    <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
    ...
    
  2. 有根模块

    <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

1 回复

更多关于Flutter测试覆盖率控制台输出插件test_cov_console的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用test_cov_console插件来输出测试覆盖率的控制台信息的示例代码和步骤。test_cov_console是一个用于在Flutter项目中生成和打印测试覆盖率报告的插件。

步骤 1: 添加依赖

首先,你需要在pubspec.yaml文件中添加test_coveragetest_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_reporttest_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

这将执行以下步骤:

  1. 运行flutter test --coverage生成覆盖率数据。
  2. 使用test_coverage格式化覆盖率数据。
  3. 如果指定了--console选项,使用test_cov_console在控制台输出覆盖率报告。

注意事项

  • 确保你的Flutter环境已经正确配置。
  • 检查test_coveragetest_cov_console的最新版本,因为插件的API可能会随着版本更新而变化。
  • 根据你的操作系统调整脚本路径和权限设置。

通过以上步骤,你应该能够在Flutter项目中成功集成并使用test_cov_console插件来输出测试覆盖率的控制台信息。

回到顶部