java - 如何测量 Java 代码库中的测试密度?

标签 java maven testing plugins code-coverage

我们正在使用 SonarQube 和 JaCoco maven 插件来提取测试度量,例如代码覆盖率。

但是,我发现我们缺少测量结果,我想找到一种方法来测量每个公共(public)方法的测试数量。

这样做的背景是,我注意到通过对 stub 方法的单个测试,很有可能获得 100% 的方法、类和行覆盖率。

待测方法

public Integer parseString(String value) {
       return null;
}

测试

public void parseStringShouldReturnNullWhenNullIsProvided() {
       Integer result = parseString(null);
       Assert.assertNull(result);
}

上面的示例给出了 100% 的覆盖率,但根本没有提供任何值。

但是,如果我们能够按公共(public)方法测量测试,则测量结果为 1,这应该被视为一个糟糕的结果。通过为此方法添加另一个测试,测量值将增加到 2,新测试将失败,但覆盖率仍为 100%

有谁知道可以从 Java 应用程序中提取这种测量值的工具?最好是可以作为插件连接到 Maven 的东西。

最佳答案

行覆盖率或方法覆盖率无法帮助您评估测试质量,而这正是您所追求的。测试质量不能通过查看每个方法或所涵盖行的测试数量来轻松确定,因为它在很大程度上取决于断言的质量。

有一些工具可以进行这样的测量。许多人进行突变测试,更改内存中的生产代码并检查是否存在测试失败。如果没有任何测试失败,则更改的操作根本没有经过真正的测试。

我已经成功使用了pitest之前,但请注意这对测试执行时间有巨大影响,即使启用了历史选项也是如此。

关于java - 如何测量 Java 代码库中的测试密度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59389609/

相关文章:

java - spring mvc和tile集成错误

asp.net-mvc - 使用 IRepository 进行 Entity Framework 测试 - 延迟加载问题

javascript - Angular js单元测试mock文档

java - 为什么@Autowired注释将同一类的每个bean关联到context.xml中?

java - 排序松散可比数据的算法?

Java 9 - 我可以将 MainClass 属性添加到存档中的 module-info.class 吗?

android - 设置 build.gradle Junit Android 测试

java - 如何使用RabbitMQ平衡发布者的请求?

java - 协议(protocol)系列不支持的地址系列 - 特定计算机上的 SocketException

windows - Windows中通过Maven构建的Hadoop不断失败