switch 语句的 Jacoco 覆盖范围

2024-02-24

我正在努力为我正在开发的库获得 100% 的代码覆盖率,但我似乎在 switch 语句和覆盖率方面遇到了一些问题,我根本不理解。

我目前正在使用 Jacoco 0.7.2,因为每个新版本似乎都与 Robolectrics 发生冲突。

我测试了一个简单的 switch 语句:

public enum Type {
    NONE, LEGACY, AKS
}

private static Class<?> getCipherClass(Type type) {
    switch (type) {
        case LEGACY:
            return CipherWrapperLegacy.class;
        case AKS:
            return CipherWrapperAks.class;
        default:
            return null;
    }
}

我编写的测试包含以下检查(我必须使用反射,因为该方法是私有的):

final CipherWrapper instance = CipherWrapper.createInstance(mockContext, CipherWrapper.Type.LEGACY, ALIAS);
assertNotNull(instance);

Method getCipherMethod = TestUtils.makeMethodAccessible(CipherWrapper.class, "getCipherClass", CipherWrapper.Type.class);
assertNull(getCipherMethod.invoke(instance, CipherWrapper.Type.NONE));
assertEquals(CipherWrapperAks.class, getCipherMethod.invoke(instance, CipherWrapper.Type.AKS));
assertEquals(CipherWrapperLegacy.class, getCipherMethod.invoke(instance, CipherWrapper.Type.LEGACY));

结果不是我所期望的:

该图像有点令人困惑,因为黄线表明缺少某些东西。绿色图标告诉我 3 个分支中有 3 个被覆盖。

我还测试了延长开关盒case NONE和一次失败,但这并没有改变任何事情。

我唯一能做的就是用 if/else 替换 switch,然后我就得到 100% 的覆盖率。

Currently I have 98% coverage but I nothing is missed based on the overview: Jacoco overall coverage


如果调用方法不喜欢您放入匿名变量:

getCipherMethod.invoke(instance, (CipherWrapper.Type) null);

然后尝试使用命名变量:

CipherWrapper.Type nullType = null;
getCipherMethod.invoke(instance, nullType);

另外,您应该检查调用异常是否只是包装由调用该方法引起的异常,而不是调用本身的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

switch 语句的 Jacoco 覆盖范围 的相关文章

随机推荐

  • 从字符串中检索图像 url

    我正在解析一个 xml 文件 我可以 NSLog 解析 但我的问题是我需要从这个 字符串 获取图像 url p a href http www bubblesurprise com WPRESS APP wp content uploads
  • 通过 XML 设置 AdMob 横幅以匹配父级宽度

    我正在尝试设置 AdMob 横幅广告以匹配其父宽度 我尝试作为示例
  • 接口如何使单元测试和模拟变得更容易?

    人们常说 接口使模拟和单元测试变得更加容易 接口如何帮助解决这个问题 这是接口的本质提供许多实现 从而启用模拟 特别是在集成测试中 您可以提供依赖系统模型的版本 例如 Web 服务 而不是实际调用一个依赖系统甚至一个模块 或者一个复杂且难以
  • 带 LDAP 的 BitNami GitLab Stack 5.1.0-2

    I am 配置 https github com gitlabhq gitlabhq blob master doc install installation md ldap authenticationLDAP 用于BitNami Git
  • 如何在本地部署ssrs?

    如何在本地计算机上部署 ssrs 我正在使用 ssrs 2005 我不确定 2005 年的情况 但在 2008 年 您右键单击项目 gt 属性并更改以下内容 目标数据集文件夹 文件夹名称 DataSet目标数据源文件夹 文件夹名称 数据源目
  • org.apache.axis2.AxisFault:在 Web 服务中传递对象数组时,未知类型无法序列化

    我创建了一个以 DTO 作为参数的 Web 服务 DTO 包含一个对象数组 我已经生成了 WSDL 框架和客户端 如果我传递字符串数组 我会尝试调用 Web 服务 Serialized array new String a n 效果很好 现
  • 如何在 WordPress 多站点中显示最近的全局帖子

    我在 ayp no 上运行一个 wordpress 多站点 我正在尝试找出一种方法来呈现所有子站点的徽标和所有博客的最新帖子 我知道有一个 wpmudev 高级插件 但我希望有一些编码我可以自己做 好吧 显然不是我自己 但至少在这里问一下并
  • 在 Swift 中更改 UITabBar selectedItem

    如何以编程方式更改 UITabBar 中的选定项目 Swift 3 及更高版本 从 Swift 3 开始 您还可以使用 tabBarController selectedIndex 0 or any other existing index
  • 优雅地崩溃内核

    后续 CUDA 停止所有其他线程 https stackoverflow com questions 3735786 cuda stop all other threads 我正在寻找一种在发生 不良情况 时退出内核的方法 编程手册说 NV
  • graphviz 中的子图布局

    我有显示两个子图的代码 graph rankdir LR subgraph cluster01 label t 0 a0 label A a1 label B a2 label C a5 label E a0 a1 a1 a2 a2 a0
  • 使用自定义表单替换部分 Outlook 客户端窗口

    我正在为 Outlook 客户端开发 VSTO 应用程序 我正在尝试在 Outlook 客户端窗口的部分中打开我的表单 该部分在下图中以红色突出显示 我认为我不能使用表单区域 因为它们替换了单个项目的视图 所以基本上我想做的是当我单击工具栏
  • 分段读取 CSV 文件的策略?

    我的计算机上有一个中等大小的文件 4GB CSV 但没有足够的 RAM 来读取该文件 64 位 Windows 上为 8GB 在过去 我只是将其加载到集群节点上并将其读入 但我的新集群似乎任意将进程限制为 4GB RAM 尽管每台机器的硬件
  • 提交到 App Store 的应用程序和应用程序更新必须使用 Xcode 5.1.1 或更高版本以及 iOS 7 SDK 构建

    今天使用新的 iTunes 连接网页时出现此错误 我的xCode版本是 我的SDK是 我之前提交的内容是使用旧网页进行的 现在新网页不断抱怨我的新版本出现此错误 有人看到同样的问题吗 好的 这可能是他们网站的问题 现在刚刚尝试使用清理后的版
  • Android-Studio-1.2.RC 关于 Square 的 Okio 库参考的 Proguard 警告

    使用 Android Studio 1 2 RC 我在 gradle 中启用了 proguard minifyEnabled true and added these rules to my proguard rules pro dontw
  • 为什么使用 OleDb 导入 Excel 时会忽略第一个空行

    使用 Net 的 OleDb 我尝试导入一个 Excel 表 其中第一行可以为空 我想保留 DataTable 中的空行 以便稍后能够将单元格映射到 Excel 样式的单元格名称 A1 A2 但无论我做什么 第一行都会被删除 Excel 文
  • 列出 Cucumber 中所有可用的标签

    是否有命令行选项可以列出黄瓜测试套件中的所有标签 例如 我想要这样的东西 cucumber show tags foo feature 那会给我类似的东西 ci development regression wip 对于单个文件 cucum
  • Spring 4 RestController JSON:根据请求“接受”标头,特征不可接受

    我正在使用 spring 4 1 1 RELEASE 并在 pom 中包含了 jackson core asl 1 9 13 和 jackson mapper asl 1 9 13 以使用 RestController 创建一个简单的应用程
  • 为什么单元格渲染器经常扩展 JLabel?

    我注意到这很常见 例如 DefaultListCellRenderer DefaultTableCellRenderer 和 DefaultTreeCellRenderer 都使用它 我在网上看到的许多自定义单元格渲染器也使用它 我想在代码
  • 使用 Php 5 和 MySQL 进行 GPS 半径搜索

    我有一个PlaceID PlaceName Lat Lon作为我的数据库结构 假设我当前的纬度和经度为 lat 37 331862 lon 122 029937 我想找到半径 100 英尺内的地方 可能允许用户选择 您可能有兴趣查看以下演示
  • switch 语句的 Jacoco 覆盖范围

    我正在努力为我正在开发的库获得 100 的代码覆盖率 但我似乎在 switch 语句和覆盖率方面遇到了一些问题 我根本不理解 我目前正在使用 Jacoco 0 7 2 因为每个新版本似乎都与 Robolectrics 发生冲突 我测试了一个