[英]Testing function call with elvis operator with Mockito in Kotlin
[英]Jacoco has a missing branch on a safe call with an elvis operator in Kotlin
這是一些代碼:
data class House(val line1: String)
data class Street(val house: House)
fun mapCheck(key : String) : House {
val map = mapOf("A" to Street(House("10 London Road")))
val street = map[key]
return street?.house ?: throw IllegalArgumentException("unknown key")
}
這是一個測試(使用Kotest和Junit 5)
@Test
fun mapTest() {
val factory = dpsServiceFactory()
factory.mapCheck("A").line1 shouldBe "10 London Road"
shouldThrow<java.lang.IllegalArgumentException> { factory.mapCheck("V") }
}
對於這條線return street?.house?: throw IllegalArgumentException("unknown key")
我的 jacoco 覆蓋率報告說我只覆蓋了 4 個條件中的 3 個。
我對此感到困惑。 我只能看到兩個條件,我在測試中滿足的兩個條件。 我不測試的條件是什么?
我已經用JaCoCo: 0.8.8, Kotest: 5.1.0, Kotlin: 1.6.10, JDK: 11.0.12
測試了你的代碼。 報告顯示所有 4 個分支都覆蓋了 100%。 您的測試應涵蓋所有情況。 我不知道為什么我們的結果不同。
JaCoCo 分行
“JaCoCo 還計算所有
if
和switch
語句的分支覆蓋率。該指標計算方法中此類分支的總數,並確定執行或錯過的分支的數量。”
https://www.eclemma.org/jacoco/trunk/doc/counters.html
*您的測試代碼是*
return street?.house ?: throw IllegalArgumentException("unknown key")
當我們反編譯它時,它會像下面的代碼。
if (street != null) { // Branch (1)
House var10000 = street.getHouse();
if (var10000 != null) { // Branch (3)
return var10000;
}
else { // Branch (4)
}
}
else { // Branch (2)
}
throw (Throwable)(new IllegalArgumentException("unknown key"));
JaCoCo 計算所有分支和所有丟失的分支。 空的else
分支不被視為遺漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.