如何获得测试覆盖或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的文件维基。