簡體   English   中英

Kotlin 的“as”轉換運算符如何影響分支覆蓋率?

[英]How does Kotlin's "as" cast operator affect branch coverage?

如何在表達式errorCode = result.data as Int的代碼中實現使用“as”轉換的表達式的分支覆蓋

在此處輸入圖像描述

Jacoco(version0.8.8 Changelog )覆蓋工具中的這個錯誤修復提供了解釋:

Kotlin 編譯器版本 1.6.0 及更高版本為“不安全”轉換運算符添加的分支在報告生成期間被過濾掉 (GitHub 1266 )

因此,Kotlin 編譯器可能會為轉換生成一個隱藏分支(檢查轉換是否可能),然后在使用的覆蓋工具中出現。

從功能的角度來看,您可能想要添加一個測試用例來涵蓋result.data不包含 int 的情況。 這也可能導致演員聲明的全面報道。

雖然我不是 Kotlin 開發人員,但不安全的演員表提出了以下問題:

  1. null != errorCode檢查表明errorCodeInt? 而不是Int類型,它永遠不會是 null。
  2. 這也表明類型轉換可以是安全的,通過result.data as? Int result.data as? Intas? 運算符在失敗時返回 null。
  3. 有趣的是,你的null != errorCode if-condition 的覆蓋范圍表明 true 和 false 分支都被覆蓋了。 我懷疑是這種情況。 相反,編譯器可能已經得出結論,條件永遠不會為假(因為errorCode具有不可為 null 的類型Int ),因此優化了 else 分支。

換句話說,切換到Int? as? 可能會將報告的未覆蓋分支移動到您的null != errorCode if-condition,這樣更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM