Flutter:Android Studio 中的内联测试覆盖率

2023-11-22

我正在 Flutter 中使用 Android Studio 3.3.1(在 Window 和 Ubuntu 上)开发一个开源 Android 应用程序。来源可在Github.

该项目有一个测试文件,可以生成覆盖率数据,可以使用诸如连体服。这向我表明 LCOV 数据包含有意义的数据。

我想使用内联代码覆盖率查看,类似于其他 Jetbrains 工具。 “Flutter Test”类别下的运行配置可以正确识别我的测试,并且能够正确运行它们。

但是,“覆盖运行”选项被禁用。我尝试了不同的运行配置,例如 Android JUnit,但没有成功。

我知道我可以手动创建覆盖率数据,但我的目标是自动生成覆盖率数据,并内联显示覆盖率(就像 Coveralls 一样)。

有谁知道什么运行配置(如果有)可以实现此目标?

顺便说一句,我最近改用 Codemagic 作为我的 CI 工具,因此 Coveralls 的覆盖率数据已经过时,但 LCOV 数据有意义的观点仍然成立。我也在Intellij中尝试了类似的设置,但结果与Android Studio相同。


我认为 Flutter 项目尚不支持。

我将所有非 UI 代码放在另一个纯 Dart 包中,并将其作为依赖项添加到 Flutter 项目中。

对于我的项目来说,这还有一个优点,即我可以与浏览器 GUI (Angular Dart) 共享的代码是分离的,并且不会意外地被 Flutter 依赖项污染,从而破坏 Web 项目。

在此项目中,当我按照以下步骤操作时,我可以在 IntelliJ 中获取覆盖率信息:

您需要“Dart 命令行应用程序”IntelliJ 运行配置,而不是“Dart Test”、“Flutter”或“Flutter Test”运行配置。

为了能够使用“Dart 命令行应用程序”运行配置运行测试,您可能需要安装独立的 Dart SDK,并在首选项 > 语言和框架 > Dart > Dart SDK 路径中选择它。

要运行覆盖范围内的所有测试而不是单个文件,您需要一个类似的文件

test/all.dart

// ignore_for_file: await_only_futures

import 'dart:async';

import 'client/controller/app_controller_test.dart' as i0;
import 'client/controller/authentication_controller_test.dart' as i1;
import 'client/controller/backoffice/backoffice_controller_test.dart' as i2;
import 'client/controller/backoffice/image_reference_controller_test.dart'
    as i3;
...

Future<void> main() async {
  i0.main();
  i1.main();
  i2.main();
...
} 

每个测试文件都有一个条目。

我使用如下所示的 Grinder 任务自动生成该文件

import 'package:path/path.dart' as path;
...
/// Generate a single Dart file that executes all tests.
/// Dart code coverage reporting still requires that.
@Task('generate test/all.dart')
Future<void> prepareCoverage() async {
  final testDir = Directory('test');
  final context = path.Context(style: path.Style.posix);
  final testFiles = testDir
      .listSync(recursive: true, followLinks: false)
      .where((e) =>
          FileSystemEntity.isFileSync(e.path) && e.path.endsWith('_test.dart'))
      .map(
          (tf) => context.normalize(path.relative(tf.path, from: testDir.path)))
      .toList()
        ..sort();
  final content = StringBuffer('''
// ignore_for_file: await_only_futures

import 'dart:async';

''');
  final executions = StringBuffer();
  for (var i = 0; i < testFiles.length; i++) {
    final testFile = testFiles[i];
    content.writeln("import '$testFile' as i$i;");
    executions.writeln('  i$i.main();');
  }
  content
    ..writeln('Future<void> main() async {')
    ..writeln()
    ..writeln(executions)
    ..writeln('}');
  File('test/all.dart').writeAsStringSync(content.toString());
  PubApp.global('dart_style')
      .run(['-w', '--fix']..add('test/all.dart'), script: 'format');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter:Android Studio 中的内联测试覆盖率 的相关文章

  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何解决 Firebase AuthUi 中无法找到显式活动?

    使用 firebase UI 时 我无法找到显式活动类 com firebase ui auth KickoffActivity protected void onCreate Bundle savedInstanceState super
  • android EditText 输入类型用于 StreetNumber 字段

    我试图在地址对话框的 streetNumber 字段中选择正确的 inputType 我想先显示数字键盘 然后让用户输入字母字符 对于一些非常特殊的情况 更接近这个的是 inputType datetime 但这不允许输入字母字符 那么如何
  • Android 服务是否有办法检测设备何时锁定?

    我有一个 Android 服务 我希望在设备锁定时执行操作 我想澄清一下 我对屏幕开 关状态不感兴趣 我知道如何使用带有 Intent ACTION USER PRESENT 和 KeyguardManager inKeyguardRest
  • 放置在 NavigationDrawer 顶部的片段

    我正在尝试添加一个PreferenceFragment在我的应用程序中 问题是 它自动放置在我的顶部NavigationDrawer public class SetPreferenceActivity extends Activity O
  • 使用 gradlew assembleRelease 从 React Native 创建发布 apk 时出现错误

    我想发布 apk 但我收到错误 文件已存在 mkdir D mobile 它在 d 驱动器中生成名为 mobile 的文件 删除文件后 再次执行 gradlew assembleRelease 创建该文件并抛出错误 任务 app bundl
  • Android Studio:未找到 Gradle DSL 方法:“classpath()”

    首先 我已阅读所有其他解决方案帖子以及有关迁移到 1 0 的官方文档 到目前为止 还没有任何效果 Error Error 23 0 Gradle DSL method not found classpath Possible causes
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • HERE 地图:更改路线已行驶部分的颜色

    导航时可以改变路线的颜色吗 具体来说 我希望路线中已行驶的部分的颜色与即将行驶的部分的颜色不同 现在都是同一个颜色 将 MapRoute 对象的 TravelColor 变量设置为透明对我来说很有效 mapRoute color Resou
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • Android:RecyclerView 不显示片段中的列表项

    有人可以帮我尝试让我的 RecyclerView 出现吗 如果我不在片段中实现它 就会出现这种情况 然而 当我尝试将其实现到片段中时 CarFront 中的其他 XML 代码与 RecyclerView 分开显示 我的日志中收到此错误 E
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • 如何在基本活动中使用 ViewBinding 的抽象?

    我正在创建一个基类 以便子级的所有绑定都将设置在基类中 我已经做到了这一点 abstract class BaseActivity2 b AppCompatActivity private var viewBinding B null pr
  • Android应用程序可以像旧的普通java小程序一样嵌入到网页中吗?

    我对 android 平台一无所知 也无法在互联网上找到这个基本问题的答案 更新 好的 我本身无法嵌入 Android 应用程序 但是我可以在 Android Webbrowser 中嵌入 Java 的东西吗 不可以 您无法将 Androi
  • Android 中带有组的列表视图

    我有一个列表视图 每行都有一些日期和文本 我可以像 iPhone 中那样将这个 listView 分组 组之间有标题吗 在 android 中是否可能 请帮忙 即 我需要在 Listview 行之间有标题栏 以便如果我使用日期对其进行分组
  • 如何在片段中实现 onBackPressed() 和意图?

    我知道 onBackPressed 是活动中的一种方法 但是 我想在片段中使用该功能 以便当按下后退按钮时 它会通过 Intent 重定向到另一个活动 有什么办法解决这个问题吗 public class News Events fragme

随机推荐

  • 找出两个缺失的数字

    我们有一台内存为 O 1 的机器 我们想要通过n第一遍中的数字 一个接一个 然后我们排除这两个数字 我们将通过n 2号码到机器 编写一个算法来查找缺失的数字 可以使用 O 1 内存来完成 您只需要几个整数来跟踪一些运行总和 整数不需要 lo
  • Autofac 和 ASP .Net MVC 4 Web API

    我在用Autofac用于我的 ASP Net MVC 4 项目中的 IoC Autofac 在初始化存储库并将其传递到API控制器 我确信我的配置中缺少某些内容 这是我导航到时遇到的错误 https localhost 44305 api
  • 在 Android 上强制执行 Expo 上的 LTR

    我正在使用 React Native 和 Expo 创建一个应用程序 但找不到强制 LTR 从左到右 方向的解决方案 我的一些用户的手机支持 RTL 语言 但我只有英语和挪威语 因此以英语显示 RTL 文本没有意义 我也使用 i18next
  • DbContext配置?

    数据库上下文 public class HaberPortalDB DbContext public DbSet
  • 有没有办法在 Visual Studio 2010 中突出显示当前活动的代码块?

    在 Visual Studio 2010 中 如果将鼠标悬停在小 减号上 它将突出显示该代码块 我的问题是 有没有办法让您在其中编码时始终突出显示该块 这样 当我在方法和类之间跳转时 我当前正在处理的任何块都会突出显示 以帮助我的眼睛快速聚
  • Angular Access ng-template 的内部组件

    假设我们有一个名为TopComponent使用这样的模板
  • 在 .CSS 文件中创建一个变量以在该 .CSS 文件中使用[重复]

    这个问题在这里已经有答案了 可能的重复 避免 CSS 中重复的常量 我们有一些在 CSS 表中重复使用的 主题颜色 有没有办法设置一个变量然后重用它 E g css OurColor Blue H1 color OurColor 不要求选择
  • 相当于 Python 的列表排序和 key / Schwartzian 变换

    在 Python 中 给定一个列表 我可以按关键函数对其进行排序 例如 gt gt gt def get value k print heavy computation for k return a 100 b 30 c 50 d 0 k
  • 手动将 JComponent 放置在 JPanel 内

    我想以编程方式将 JLabel 移动到 JPanel 内的特定位置 我努力了setLocation int x int y 但它不起作用 我试图不使用任何布局管理器 这是一个关于如何在不使用布局管理器的情况下布局组件的精彩教程 http j
  • UITextView 中的文本垂直居中

    我想将文本居中垂直里面一个大UITextView填满整个屏幕 因此 当文本很少时 说几个单词 它会按高度居中 这不是一个关于文本居中 可以在IB中找到的属性 的问题 而是关于放置文本的问题垂直就在中间UITextView if文字很短 所以
  • 以编程方式将 svg 转换为图像

    我正在尝试将 svg 转换为图像 我一直在研究几种工具 但仍然无法实现这一点 1 SVG渲染引擎但我遇到了麻烦 因为它没有文档 这是我的代码 using FileStream fileStream File OpenRead C sampl
  • 使用 Python 删除或删除 CSV 文件中的最后一列

    我有一个包含 5 列的 CSV 文件 使用Python 如何删除最后一列 示例中的header5 我是否缺少一种简单的方法 或者我是否必须循环遍历 CSV 中的所有行并从最后一列中删除每个值 这仍然可能会给我留下不需要的前置逗号 我在 CS
  • 使用 SQLAlchemy 和多处理挂入 Python 脚本

    考虑以下 Python 脚本 它使用 SQLAlchemy 和 Python 多处理模块 这是 Debian squeeze 上的 Python 2 6 6 8 b1 默认 和 SQLAlchemy 0 6 3 3 默认 这是一些实际代码的
  • ListView 内的 Horizo​​ntalScrollView:较小的垂直滚动停止水平滚动

    在我的示例活动中 我有 一个ListView包含 包含多个Horizo ntalScrollView 一组TextView 但水平滚动体验相当糟糕 当我启动水平滚动 或快速滑动 时 我必须非常小心才能使其正常工作 一旦水平滚动包含 小的 垂
  • 使用 git filter-branch 删除除文件列表之外的所有内容的历史记录

    我正在尝试在两个 git 存储库之间移动一些文件repo1 and repo2 我有一个要移动的文件的简短列表 保留历史记录 三个要移动的文件repo1 libraryname file1 libraryname file2 tests l
  • 使用JarJar重新打包工具

    我已将 Web 应用程序部署到 Google 应用程序引擎 并且我的 Web 服务使用 jersey 1 14 框架 当我尝试使用或调用 GAE 上的 Web 服务时 我收到 java lang InknownClassChangeErro
  • 如何获取 Bokeh 小部件事件和属性的列表(可用于触发 Python 回调)

    真正的 一般 问题 我是 Bokeh 新手 我正在尝试构建一个可以根据小部件提供的输入动态更新的图 然而 对于大多数小部件来说 Python 回调的使用并没有完整记录 因此我陷入了困境 我如何知道应该使用哪种小部件方法来附加我的回调 我可以
  • if 语句中的组合框为 null

    我正在尝试编写一个 if 语句 其中如果某个组合框为空 那么它会运行代码的某个部分 如果其中有数据 然后它会运行另一个组合框 我写了这个 Private Sub ProjectAddSetDateAutoBtn Click If Proje
  • 从哪里下载 Iesi.Collections?

    尝试 nHibernate 它说找不到 Iesi Collections 我可以从哪里得到这个 如果 nHibernate 如此重要 它不应该随 nHibernate 下载一起提供吗 与 NHibernate 一起提供的 Iesi Coll
  • Flutter:Android Studio 中的内联测试覆盖率

    我正在 Flutter 中使用 Android Studio 3 3 1 在 Window 和 Ubuntu 上 开发一个开源 Android 应用程序 来源可在Github 该项目有一个测试文件 可以生成覆盖率数据 可以使用诸如连体服 这