Abstract
Continuous Integration has become a standard practice in modern development, and Go provides a rich set of tools to support it: go vet, unit tests, benchmarks, and fuzz testing. Building a CI pipeline that maintains a baseline of quality is straightforward.
But how do we know we're writing good tests? A test that calls a function and discards the result still contributes to coverage. You can hit 100% coverage with zero assertions.
Mutation testing exposes this gap. It intentionally introduces small changes to your source code — flipping + to -, swapping == to !=, removing else branches — and runs your test suite against each mutant. If the tests fail, the mutant is "killed." If they still pass, the mutant "survived," revealing a real weakness.
The challenge is that mutation testing is slow. In this talk, I'll show how Go's -overlay flag enables safe, parallel mutation testing without modifying source files, and how to integrate it incrementally into CI — running only on changed code in a pull request.