[英]How does Kotlin's "as" cast operator affect branch coverage?
Jacoco(version0.8.8 Changelog )覆蓋工具中的這個錯誤修復提供了解釋:
Kotlin 編譯器版本 1.6.0 及更高版本為“不安全”轉換運算符添加的分支在報告生成期間被過濾掉 (GitHub 1266 )
因此,Kotlin 編譯器可能會為轉換生成一個隱藏分支(檢查轉換是否可能),然后在使用的覆蓋工具中出現。
從功能的角度來看,您可能想要添加一個測試用例來涵蓋result.data
不包含 int 的情況。 這也可能導致演員聲明的全面報道。
雖然我不是 Kotlin 開發人員,但不安全的演員表提出了以下問題:
null != errorCode
檢查表明errorCode
是Int?
而不是Int
類型,它永遠不會是 null。result.data as? Int
result.data as? Int
, as?
運算符在失敗時返回 null。null != errorCode
if-condition 的覆蓋范圍表明 true 和 false 分支都被覆蓋了。 我懷疑是這種情況。 相反,編譯器可能已經得出結論,條件永遠不會為假(因為errorCode
具有不可為 null 的類型Int
),因此優化了 else 分支。 換句話說,切換到Int?
as?
可能會將報告的未覆蓋分支移動到您的null != errorCode
if-condition,這樣更有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.