如何显示来自 Flutter 测试的代码覆盖率数据?

我正在开发一个 Flutter 应用程序,它使用 Android Studio 作为我的 IDE。我正在尝试编写测试并检查代码覆盖率,但我不知道如何在 IDE 或任何其他应用程序中查看数据。

通过运行 flutter test --coverage,覆盖率报告似乎被生成到一个文件 /coverage/lcov.info中。该文件看起来像这样:

SF:lib\data\Customer.g.dart
DA:9,2
DA:10,2
DA:11,2
DA:12,2
DA:13,2
DA:20,0
DA:21,0
DA:22,0
DA:23,0
DA:24,0
...

看看这个文件,它似乎有一个我的项目文件的一行一行的覆盖率数据列表。在 Android Studio 中有没有查看这些信息的方法?

38864 次浏览

你可以用 原子编辑器查看颤振产生的代码覆盖率。
您只需要安装 Dart 和 lcov-info 软件包。

然后你加载你的项目文件夹,按 Ctrl+Alt+c,覆盖率将显示与整个项目覆盖率的总结,也具有特定的线高亮。

Android 工作室似乎还没有任何插件可以做到这一点。

报道报道现在可以在 Android Studio 上获得

enter image description here

您还可以安装 lcov并将 lcov.info文件转换为 HTML页面,然后在带有排序选项的浏览器中查看结果。

1. 安装

1.1在 Ubuntu 中安装

sudo apt-get update -qq -y
sudo apt-get install lcov -y

1.2. 在 Mac 中安装

brew install lcov

2. 运行测试,生成覆盖文件并转换为 HTML

flutter test --coverage
genhtml coverage/lcov.info -o coverage/html

3. 在浏览器中打开覆盖率报告

open coverage/html/index.html

注意 这种方法可以将它添加到 circleci工件和 coveralls中。

2021年9月18日更新:

在编辑器中查看如何完成的新答案

2020年9月5日更新:

原来你可以只运行 flutter test --coverage,然后在同一个终端会话中运行 bash <(curl -s https://codecov.io/bash) -t token令牌应该是你从 CodeCov获得的存储库令牌。该命令将自动查找并上传覆盖率数据,并且在 CodeCov 仪表板上可见。所以你不需要 Bitrise。

原文:

我一直在使用 比特利斯对我的颤振项目的持续集成,有一个简单的方法来发送您的报告到 CodeCov,然后可视化它那里。这需要你获得一些关于如何设置和使用 Bitrise 的知识,但是很多都是自动的,所以不要担心,如果你是一个小团队,你应该可以使用免费层。下面是让 CodeCov 工作的关键点。

  1. 确保您将—— cover 变量添加到 Flutter Test 工作流中。

Bitrise coverage variable example

  1. 将来自 CodeCov 的令牌添加为秘密密钥,您将需要注册 CodeCov 并链接存储库以接收令牌。

Bitrise secret key example

  1. 添加 CodeCov 工作流并选择 CODECOV _ TOKEN 键。

Bitrise CodeCov workflow example

之后,您应该能够启动构建,如果成功,您应该在 CodeCov 上看到仪表板更新。

根据这个链接 Flutter/Dart 的 SonarQube 插件,你可以使用 SonarQube 和一个额外的 Flutter 插件。

我已经在 docker 上的免费版 SonarQube 上试过了,如果你配置正确,你只需要在 Android Studio 终端上运行以下命令:

# Download dependencies
flutter pub get
# Run tests with User feedback (in case some test are failing)
flutter test
# Run tests without user feedback regeneration tests.output and coverage/lcov.info
flutter test --machine --coverage > tests.output


# Run the analysis and publish to the SonarQube server
sonar-scanner

下面是报告的示例,您可以深入研究行代码。 Valid XHTML

因此,实际的答案是否定的,您现在不能在 Android Studio (或 IntelliJ IDEA)中查看覆盖率报告。

与 JavaScript/TypeScript 和 Java,可能还有 Python 不同,IntelliJ IDE (进一步说,Android Studio)没有集成 IDE 支持,不能在编辑器中显示 Flutter 代码的测试覆盖率。这是一个遗憾,因为能够在编辑器的源代码中看到未测试的代码分支和高亮显示的代码行是一件美妙的事情。不知道为什么这个插件还不存在,因为它在其他语言中得到了很好的支持,并且生成了一个标准的 lcov.info文件。

IntelliJ 中有一个捆绑的代码覆盖工具窗口,它允许你以树/表的向下钻取格式浏览 lcov.info 文件,但是它似乎不适用于 flutter (flutter test --coverage)生成的覆盖报告。我认为它可能是 lcov.info 和我的多模块应用程序结构中的相对路径,但是我尝试在 lcov.info中手动编辑文件路径,但是我没有运气让统计数据显示出来。

这是您希望运行以查看 MacOS 上浏览器中的测试覆盖率的内容

flutter test --coverage
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.html

我刚刚开发了一个简单的 dart 包(Test _ cov _ controller 测试 _ cov _ 控制台) ,所以你可以直接从 Android Studio 终端运行它。这个工具将读取 flutter test —— cover 生成的 lcov.info。找到这个 源代码链接

您可以在全局范围内安装 lib,这样它就不会改变您当前的项目:

    flutter pub global activate test_cov_console

然后运行它:

    flutter pub global run 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 |                   |
---------------------------------------------|---------|---------|---------|-------------------|

输出可以保存到 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,""

颤振增强套件就是这么做的,它是一个 Android Studio/IntelliJ 插件,可以生成覆盖率报告。 它显示每个文件的覆盖范围,并突出显示被覆盖的行(行号旁边的红色/绿色条) :

Test coverage report shown in Android Studio

  1. 从插件选项中安装插件 (偏好 > 插件 > 市场 tab > Search for 颤振增强套件)。

  2. 为覆盖率测试创建一个新的 运行配置

(快跑 > 编辑配置 > 单击 加号按钮添加新配置 > 在下拉列表中选择 颤振测试)

Add new Run Configuration in Android Studio

  1. 命名您的配置(例如“所有测试”) ,设置范围和包含您的测试的文件或目录。

  2. 使用顶部菜单中的覆盖率运行测试。

Launch a Run Configuration in Android Studio.

随着 Flutter 2.5的发布,您现在可以在 IntelliJ 和 Android Studio 中查看测试覆盖率。
看看这个帖子

此外,最新的 IJ/AS 插件 Flutter 允许您查看 单元测试和集成测试运行的覆盖信息 可以从“调试”按钮旁边的工具栏按钮访问:

Android Studio 和 IntelliJ: enter image description here