如何获得测试覆盖或Jacoco为Kotlin数据类忽略

Jacoco显示Kotlin数据类别的覆盖率为0%。 如何配置它来衡量覆盖率或忽略数据类呢?

虽然它不能真正回答你的问题,但是通过编写覆盖数据类生成的函数的测试,你可以获得对jacoco数据类的相当全面的覆盖。

例如,假设有一个var和一个val的数据类

 data class MyDataClass(var s1: String, val s2: String) 

当我运行jacoco时,我看到它正在测量由MyDataClass生成的以下内容的覆盖范围:

  • hashCode()
  • equals(Object)
  • toString()
  • MyDataClass(String, String)
  • copy(String, String)
  • setS1(String)
  • getS1()
  • getS2()
  • component1()
  • component2()

涵盖大部分内容的unit testing可能是:

  @Test fun testCodeCoverageForMyDataClass() { // call the constructor val tested = MyDataClass("original s1", "original s2").apply { // call the setters s1 = "new s1" // call the getters assertEquals("new s1 original s2", "$s1 $s2") // call toString() assertEquals("MyDataClass(s1=new s1, s2=original s2)", "$this") // call componentN() functions val (res1, res2) = this assertEquals("new s1 original s2", "$res1 $res2") } // call copy() val testedCopy = tested.copy(s2 = "new s2").apply { // call equals() assertNotEquals(this, tested) // call hashCode() assertNotEquals(this.hashCode(), tested.hashCode()) } } 

我知道,这是一种痛苦,但是,除非有支持,否则这可以帮助我获得覆盖面。

这里有一个悬而未决的问题,所以自动覆盖过滤似乎是一个正在进行的工作。

但是有一个覆盖过滤的注释,你可以在这里find更多的信息。 这可能工作,我没有尝试。

注:提到的注释是一个计划的未来function。 我错误地拿了一些types的文件维基。