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

时间:2011-08-16 20:06:17

标签: scala intellij-idea code-coverage emma

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

我无法确定为什么我的Scala案例类的构造函数行只显示部分(黄色)覆盖率。我查看了EMMA常见问题解答并在线研究了此事但没有成功。有没有人知道如何在案例类上达到100%的覆盖率?

2 个答案:

答案 0 :(得分:4)

case class A(a: Any)为您生成了许多方法,其中包括:

  1. A#equals
  2. A#canEqual
  3. A#hashCode
  4. A#toString
  5. A#productPrefix
  6. A#productElement
  7. A#productArity
  8. A#productIterator
  9. A#copy
  10. A.unapply
  11. A.apply
  12. 大多数这些将在字节码中以与类定义相同的行号报告。

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

答案 1 :(得分:0)

我知道这是一个非常老的问题,但是这个问题在今天仍然存在。给定一个简单的案例类,为了从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%的覆盖率。