java - 如何测量 Java 代码库中的测试密度?
问题描述
我们正在使用 SonarQube 和 JaCoco maven 插件来提取测试度量,例如代码覆盖率。
但是,我发现我们得到的测量结果是缺乏的,我想找到一种方法来测量每个公共方法的测试数量。
这样做的背景是我注意到,通过对存根方法的单个测试,很有可能获得 100% 的方法、类和行覆盖率。
被测方法
public Integer parseString(String value) {
return null;
}
测试
public void parseStringShouldReturnNullWhenNullIsProvided() {
Integer result = parseString(null);
Assert.assertNull(result);
}
上面的示例提供了 100% 的覆盖率,但根本没有提供任何价值。
但是,如果我们能够根据公共方法测量测试,这将给出 1 的测量值,这应该被视为一个糟糕的结果。通过为此方法添加另一个测试,测量值将增加到 2,新测试将失败,但覆盖率仍为 100%
有谁知道从Java应用程序中提取这种测量的工具?最好是可以作为插件连接到 maven 的东西。
解决方案
线路覆盖或方法覆盖不能帮助您评估测试质量,而这正是您所追求的。测试质量不能通过查看每个方法或所涵盖的行的测试数量来轻松确定,因为它在很大程度上取决于断言的质量。
有一些工具可以进行这样的测量。许多人进行突变测试,更改内存中的生产代码并检查是否存在测试失败。如果没有任何测试失败,则更改的操作根本没有经过真正的测试。
我之前已经成功使用过pitest,但请注意,即使启用了历史记录选项,这也会对测试执行时间产生巨大影响。
推荐阅读
- python - 在 Python 中使用自定义词汇进行文本分类
- php - WooCommerce 搜索产品变体
- asp.net - 从 asp.net MVC4 升级到 MVC5 抛出“此请求已被阻止,因为敏感信息可能会泄露给第三方
- python - 我不断收到 AttributeError
- jax-rs - java.lang.ClassCastException:java.lang.String 无法转换为 java.lang.Enum
- python - 如果日期时间在彼此的某个时间范围内,则在 Python 中加入两个数据集,并创建一个“不匹配”数据集
- javascript - props 仍然适用于 React 中访问参数的函数组件吗?
- python - 如何在 python Tkinter GUI 中以最简单的方式编写简单的计算器?我试过了,但它不工作
- python-3.x - python中的SES电子邮件附件
- sql - SQL Server 别名不工作(网络相关实例错误)