Scala的最佳代码覆盖率

Scala最好的代码覆盖率指标是语句覆盖率 。 就那么简单。 它最适合Scala中的典型编程风格。 Scala是一个变色龙,它可以看起来像您想要的任何东西,但通常更多的语句写在一行上,而条件式“ if ”语句很少使用。 换句话说, 线路覆盖率分支覆盖率指标无济于事。

Java工具

Scala在JVM上运行,因此许多现有的Java工具也可用于Scala。 但是对于代码覆盖率来说,这样做是错误的。

一种错误的选择是使用工具来检查覆盖率,例如JaCoCo 。 尽管它为您提供了覆盖率数字,但JaCoCo对Scala一无所知,因此它不会告诉您忘记覆盖哪段代码。

另一个不幸的是,工具本身仅支持行和分支覆盖率指标。 Cobertura是Java世界中的标准,它生成的XML覆盖率报告受许多工具支持。 一些Scala代码覆盖工具因其受欢迎程度而决定使用Cobertura XML报告格式。 可悲的是,它不支持语句覆盖。

声明范围

为什么? 因为典型的Scala语句如下所示(单行代码):

def f(l: List[Int]) = l.filter(_ > 0).filter(_ < 42).takeWhile(_ != 3).foreach(println(_))

线路和分支覆盖均不适用于此。 您何时会认为这条单行包含在测试中? 是否至少已调用该行的一条语句? 也许。 还是全部? 也可能。

分公司在哪里? 是的,有些语句是有条件执行的,但是决策逻辑在List的内部实现中是隐藏的。 分支覆盖工具是无助的,因为它们看不到这种条件执行。

我们需要知道的是,是否已通过自动化测试执行了_ > 0_ < 42println(_)类的单个语句。 这是语句的覆盖范围。

采空救人!

幸运的是,有一个名为Scoverage的工具。 它是Scala编译器的插件。 还有一个SBT插件 。 它正是我们需要的。 它生成HTML报告以及自己的XML报告,其中包含有关涵盖语句的详细信息。

SonarQube的覆盖插件

最近,我为Sonar 4实现了一个插件,这样语句覆盖率度量就可以成为团队持续集成过程和必需的质量标准的组成部分。 它使您可以查看整个项目语句的覆盖范围,以及更深入地了解子模块,目录和源代码文件以查看未发现的语句。

带有Scoverage插件的项目仪表板:

01_仪表板

多模块项目概述:

02_detail

具有语句覆盖率,语句总数和涵盖语句数的列:

03_列

具有覆盖线和未覆盖线的源代码标记:

04_coverage

参考: Rado Buransky博客博客上的JCG合作伙伴 Rado Buransky提供了有关Scala的最佳代码报道

翻译自: https://www.javacodegeeks.com/2014/02/the-best-code-coverage-for-scala.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值