測試覆蓋率不夠怎麼補:找出缺失的測試場景提示詞(按代碼分支與業務風險排序)

已經有一些測試、但不確定漏了什麼,或者覆蓋率報告顯示某些分支沒測到時用:把被測代碼和現有測試一起給 AI,讓它對照分支、邊界和業務規則找出遺漏的場景,按風險排序,並補寫最重要的幾個測試。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
請對照被測代碼和現有測試,找出還沒有被覆蓋的測試場景。

- 語言與測試框架:[語言與測試框架](例:Java + JUnit 5 + Mockito)
- 被測代碼:
  [粘貼被測代碼]
- 現有測試:
  [粘貼現有測試]
- 覆蓋率報告中未覆蓋的行或分支(沒有就寫無):[未覆蓋的行]
- 這段代碼的業務重要性:[如涉及金額計算、只是展示格式化]

分析步驟:
1. 列出被測代碼中所有的分支和判斷條件(if、switch、三元表達式、提前返回、異常拋出、循環的零次和多次),以及每個條件的真假兩種情況。
2. 把現有測試一一對應到這些分支,標出哪些已覆蓋、哪些沒有。
3. 除了代碼分支,再檢查這些容易遺漏的場景:
   - 邊界值:零、負數、最大值、空集合、單元素集合、恰好等於閾值;
   - 異常路徑:依賴拋異常、返回空值、超時;
   - 組合條件:多個條件同時成立時,是否只測了單獨成立的情況;
   - 狀態與順序:調用多次、調用順序變化;
   - 現有測試的質素問題:沒有斷言、斷言太弱(只判斷不為空)、斷言了實現細節而不是結果。
4. 輸出缺失場景表:場景 | 對應的代碼位置 | 可能隱藏的問題 | 風險等級(高 / 中 / 低)。按風險從高到低排序。
5. 為風險最高的 3 到 5 個場景寫出完整測試代碼,風格與現有測試保持一致。

注意:覆蓋率高不等於測得好。不要為了提高覆蓋率給 getter、setter 這類沒有邏輯的代碼寫測試。

高亮處換成你自己的內容:[語言與測試框架]、[粘貼被測代碼]、[粘貼現有測試]、[未覆蓋的行]、[如涉及金額計算、只是展示格式化]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:被測代碼和現有測試都要完整貼上,AI 才能做對照。[這段代碼的業務重要性] 決定補測的深度:金額、權限、狀態流轉相關的代碼值得把邊界測透,純展示格式化的代碼點到為止。

常見坑:

  • 覆蓋率工具說某行「已覆蓋」,只代表它被執行過,不代表結果被檢查過。沒有斷言或斷言太弱的測試,模板專門要求一起找出來。
  • 「會員且滿 100 元才打折」這類組合條件,分別測過「是會員」和「滿 100」,覆蓋率可能已經滿了,但「是會員但不滿 100」這種情況可能根本沒測。
  • 不要為了數字好看給沒有邏輯的代碼寫測試,把精力留給高風險分支。

追問技巧:補完測試後,追問「如果我故意把第 N 行的大於號改成大於等於,現有測試能發現嗎」,用這種「手動變異」的方式檢驗測試是否真的有效。

示例輸出

示例,僅供參考(會員折扣計算,節選)
場景代碼位置可能隱藏的問題風險
會員但訂單金額恰好等於 100if (isMember && total >= 100)大於和大於等於寫反高
非會員但金額滿 100同上組合條件只測了會員側高
優惠券與會員折扣疊加applyCoupon()先後順序不同導致金額不同高
現有測試 testDiscount斷言 assertNotNull(result)斷言太弱,金額算錯也會通過中
java
@Test
void 會員訂單金額恰好100元時享受折扣() {
    var price = calculator.finalPrice(member(), new BigDecimal("100.00"));
    assertEquals(new BigDecimal("90.00"), price);
}

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~