rust

3 posts

Rust 的 Mutation Testing 確實有效,但編譯時間會讓你痛苦

cargo-mutants 能找出那些只會假裝驗證程式碼的測試。以下是 mutation testing 在 Rust 中的運作原理、它能抓到什麼問題,以及編譯時間的成本是否值得。

你已經達到 100% 的行覆蓋率。每個分支都被執行過,每個函式都被呼叫過。然後有人把你的計價邏輯裡的 改成 ,跑了一下測試,全部通過。 這不是理論上的問題。這就是你的測試執行了程式碼,卻沒有真正驗證行為時會發生的事。Coverage 衡量的是哪些行被執行過,而不是哪些輸出被檢查過。Mutation testing…

Rust 的 Property-Based 測試:找出單元測試漏掉的 Bug

範例導向的測試只涵蓋你想得到的輸入。Property-based 測試會產生隨機資料、檢查不變條件,並將失敗縮減到最小的反例。

你寫了一個 函式。你用 和 測試它。通過了。你發布出去。 有個使用者傳入了一個單元素的 slice。你的函式把它遺漏了。他們開了一個 issue。你盯著測試檔案,納悶自己怎麼會漏掉這麼明顯的東西。 你之所以漏掉,是因為範例導向的測試只能抓到你預期中的 bug。測試套件裡的每一個…

Rust Runtime Contracts 在 Release Build 中可以零成本,但編譯器不會幫你做到

Rust 會自動剝除 debug assertions,但真正的 design-by-contract 需要的遠不止 debug_assert!。以下說明如何建立零成本的 runtime contracts,讓它們從你的 release binary 中完全消失。

Rust 可以在開發階段強制執行 runtime contracts,並在 release build 中將它們完全抹除。但書在於,這門語言並未將 contracts 視為 first-class concept。你拿到了積木,但得自己動手組裝。 是最顯而易見的起點。它在 debug build 中執行,在…