iT邦幫忙

2026 iThome 鐵人賽

DAY 1
0
Vibe Coding

當全世界都在吹 AI Coding 誰來測這坨髒東西系列 第 1

All tests passed 是在自我安慰?AI 產的 Unit Test 根本是一堆沒用的垃圾

  • 分享至 

  • xImage
  •  

把產線上的瑕疵檢驗儀標準調到最低,當然每個出廠的都是良品。爛的 AI 寫的測試就是那台壞掉的檢驗儀,所有垃圾都 all passed

在工業工程(IE)裡,我們非常看重品檢站(Inspection Station)的可靠度。如果檢驗儀器本身沒有經過校正(Calibration),那你測出來的 Cpk(製程能力指數)再高都是假的。

現在的工程師太依賴 Copilot 或 Gemini 來補 Unit Test。像是說你給它一個 Function,按個 Tab,它瞬間幫你生出十幾個 Test Cases。但你仔細看過它到底在測什麼嗎?AI 為了確保測試「會過」,最喜歡偷偷做兩件事:

  1. 無腦 Over-mocking:把所有外部依賴、連同你要測的核心邏輯,全部用 Mock 給 stub 掉,最後根本是在測 Python 的 MagicMock 或是 Java 的 Mockito 會不會動。

  2. 同源謬誤的 Assert:如果 AI 在 Production Code 裡把「1+1 算成 3」,它在 Test Code 裡就會理直氣壯地寫下 assert result == 3.

這種測試在產線上叫做「虛假防呆(Fake Poka-Yoke)」。表面上 Pipeline 跑完了,Coverage 很高,但當真實使用者的異常 Payload 打進來時,系統照樣死給你看。測試真正的目的不是為了證明 Code「會動」,而是為了找出 Code「什麼時候會死」

我們來看一個真實發生的慘案。這是一個處理訂單折扣的簡單邏輯,我們來看看 AI 會生出什麼樣的垃圾測試,以及我們該怎麼把它改成真正有防禦力的寫法。

# AI 為了讓測試過,直接把核心的算錢邏輯 Mock 掉 lol
@patch('order_service.calculate_discount')
def test_apply_discount(mock_calculate):
    # Setup
    mock_calculate.return_value = 100  # 這邊直接寫死回傳值
    order = Order(total=500)
    
    # Execute
    result = apply_discount(order)
    
    # Assert
    assert result == 100  # XD
    mock_calculate.assert_called_once_with(order)

這種測試就算跑一萬遍都是綠燈,但如果 calculate_discount 裡面發生 Float 浮點數精度遺失,這個測試完全抓不到!

工業級的防呆測試(拒絕無腦 Mock,強調 State Verification):
我們在設定測試框架時,必須強制剝奪 AI 亂 Mock 的權利。測試應該要驗證「狀態(State)」跟「邊界(Boundary)」,而不是只驗證「行為有沒有被呼叫」。

def test_apply_discount_with_edge_cases():
    # 不准 Mock 核心的 Domain Logic,傳入真實或極端的 Value Object
    order_normal = Order(total=Decimal('500.00'), user_tier='VIP')
    order_zero = Order(total=Decimal('0.00'), user_tier='NORMAL')
    order_negative = Order(total=Decimal('-50.00'), user_tier='VIP')
    
    # 驗證極限公差
    assert apply_discount(order_normal).final_price == Decimal('450.00')
    assert apply_discount(order_zero).final_price == Decimal('0.00')
    
    # 驗證預期內的 Exception 是否正確噴出 (Fail-Fast 機制)
    with pytest.raises(InvalidOrderAmountException):
        apply_discount(order_negative)

系列文
當全世界都在吹 AI Coding 誰來測這坨髒東西1
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言