Mutation testing: grading the tests, not the code

The anchor post of the mutation-testing series. What mutation testing actually measures, why it exists as a complement to line coverage, when to reach for it, and the specific classes of test-suite weakness it uncovers — written to stand alone regardless of your language.

July 25, 2026 · 21 min · Omar Crosby

Mutation testing in Rust: getting started with cargo-mutants

The Rust chapter of the mutation-testing series: what the technique measures, why the number is stronger than line coverage, and how to run cargo-mutants against a real Rust crate in five minutes.

July 25, 2026 · 14 min · Omar Crosby

Mutation testing in Go: getting started with gremlins

The Go companion to the mutmut post: what mutation testing actually measures, how gremlins produces the score, and how to run it against a real Go module in five minutes.

July 25, 2026 · 16 min · Omar Crosby

Mutation testing in Python: getting started with mutmut

Line coverage tells you where the tests went. Mutation testing tells you whether the tests you have would notice if the code were wrong. A plain-language getting-started guide with mutmut.

July 25, 2026 · 15 min · Omar Crosby

Black-box unit tests: testing behavior, not implementation

Unit tests that break every time you refactor are describing the implementation, not the behavior. A senior engineer’s playbook for writing black-box tests that survive.

July 24, 2026 · 15 min · Omar Crosby