IntelliJ IDEA 10.5的Scala案例类中的部分EMMA代码覆盖率

IntelliJ IDEA 10.5的Scala案例类中的部分EMMA代码覆盖率,scala,intellij-idea,code-coverage,emma,Scala,Intellij Idea,Code Coverage,Emma,我正在使用IntelliJ IDEA 10.5和8月14日更新的Scala插件v0.4.1338,以及Scala 2.9.0.1。我最近开始在IDEA中使用EMMA测试覆盖率实用程序来生成覆盖率报告 我无法确定为什么Scala case类的构造函数行只显示部分(黄色)覆盖。我查阅了EMMA常见问题解答,并在网上对此事进行了研究,但没有成功。有人知道我怎样才能在一个案例类上达到100%的覆盖率吗?案例类a(a:any)为您生成许多方法,其中包括: A#等于 A#canEqual A#hashCod

我正在使用IntelliJ IDEA 10.5和8月14日更新的Scala插件v0.4.1338,以及Scala 2.9.0.1。我最近开始在IDEA中使用EMMA测试覆盖率实用程序来生成覆盖率报告

我无法确定为什么Scala case类的构造函数行只显示部分(黄色)覆盖。我查阅了EMMA常见问题解答,并在网上对此事进行了研究,但没有成功。有人知道我怎样才能在一个案例类上达到100%的覆盖率吗?

案例类a(a:any)为您生成许多方法,其中包括:

  • A#等于
  • A#canEqual
  • A#hashCode
  • A#toString
  • A#productPrefix
  • A#productElement
  • A#生产率
  • A#产品迭代器
  • A#副本
  • A.unapply
  • A.apply
  • 其中大部分将在字节码中与类定义的行号相同的位置报告


    您可以编写一个反射实用程序,在每个单元测试中为您的案例类调用所有这些方法,修补代码覆盖率工具以忽略这一行,或者只是忍受它。

    我知道这是一个非常古老的问题,但这个问题在某种程度上仍然存在。给定一个简单的case类,为了从IntelliJ获得一个完整的覆盖率报告,您还需要测试
    unapply
    方法

    // Code
    
    final case class Foo(symbol: String, name: String)
    
    // Test
    
    val myFoo = Foo("TheSymbol", "TheName")
    
    Foo.unapply(myFoo).get should be(("TheSymbol", "TheName"))
    

    如果没有它,我就可以得到50%的基本案例覆盖率。

    是的,这似乎是正确的。凭直觉,我为隐式hashCode()和equals()函数编写了一些测试,报告的行覆盖率确实增加了。非常感谢。想和大家分享一个自动化的要点吗?这将是一个非常棒的特性,可以使用WordSpec或FunSpec自动神奇地处理case类。