測試覆蓋率不夠怎麼補:找出缺失的測試場景提示詞(按代碼分支與業務風險排序)
已經有一些測試、但不確定漏了什麼,或者覆蓋率報告顯示某些分支沒測到時用:把被測代碼和現有測試一起給 AI,讓它對照分支、邊界和業務規則找出遺漏的場景,按風險排序,並補寫最重要的幾個測試。
通用大模型 對話模型通用
請對照被測代碼和現有測試,找出還沒有被覆蓋的測試場景。 - 語言與測試框架:[語言與測試框架](例:Java + JUnit 5 + Mockito) - 被測代碼: [粘貼被測代碼] - 現有測試: [粘貼現有測試] - 覆蓋率報告中未覆蓋的行或分支(沒有就寫無):[未覆蓋的行] - 這段代碼的業務重要性:[如涉及金額計算、只是展示格式化] 分析步驟: 1. 列出被測代碼中所有的分支和判斷條件(if、switch、三元表達式、提前返回、異常拋出、循環的零次和多次),以及每個條件的真假兩種情況。 2. 把現有測試一一對應到這些分支,標出哪些已覆蓋、哪些沒有。 3. 除了代碼分支,再檢查這些容易遺漏的場景: - 邊界值:零、負數、最大值、空集合、單元素集合、恰好等於閾值; - 異常路徑:依賴拋異常、返回空值、超時; - 組合條件:多個條件同時成立時,是否只測了單獨成立的情況; - 狀態與順序:調用多次、調用順序變化; - 現有測試的質素問題:沒有斷言、斷言太弱(只判斷不為空)、斷言了實現細節而不是結果。 4. 輸出缺失場景表:場景 | 對應的代碼位置 | 可能隱藏的問題 | 風險等級(高 / 中 / 低)。按風險從高到低排序。 5. 為風險最高的 3 到 5 個場景寫出完整測試代碼,風格與現有測試保持一致。 注意:覆蓋率高不等於測得好。不要為了提高覆蓋率給 getter、setter 這類沒有邏輯的代碼寫測試。
高亮處換成你自己的內容:[語言與測試框架]、[粘貼被測代碼]、[粘貼現有測試]、[未覆蓋的行]、[如涉及金額計算、只是展示格式化]
ChatGPT Plus 充值
已被複製 0 次
使用說明
怎麼填變量:被測代碼和現有測試都要完整貼上,AI 才能做對照。[這段代碼的業務重要性] 決定補測的深度:金額、權限、狀態流轉相關的代碼值得把邊界測透,純展示格式化的代碼點到為止。
常見坑:
- 覆蓋率工具說某行「已覆蓋」,只代表它被執行過,不代表結果被檢查過。沒有斷言或斷言太弱的測試,模板專門要求一起找出來。
- 「會員且滿 100 元才打折」這類組合條件,分別測過「是會員」和「滿 100」,覆蓋率可能已經滿了,但「是會員但不滿 100」這種情況可能根本沒測。
- 不要為了數字好看給沒有邏輯的代碼寫測試,把精力留給高風險分支。
追問技巧:補完測試後,追問「如果我故意把第 N 行的大於號改成大於等於,現有測試能發現嗎」,用這種「手動變異」的方式檢驗測試是否真的有效。
示例輸出
示例,僅供參考(會員折扣計算,節選)
| 場景 | 代碼位置 | 可能隱藏的問題 | 風險 |
|---|---|---|---|
| 會員但訂單金額恰好等於 100 | if (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);
}同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。


0 條評論
還沒有評論,來搶沙發~