Mutation Testing
Line coverage proves your tests ran the code. Mutation testing proves they'd catch a real bug. This code-first training turns that harder question into daily practice — the same bar jCustos itself is held to.
What your team can do after
Concrete, transferable skills — not a metrics vanity exercise.
Read a mutation report
Open a PIT report and read it fluently — killed vs. survived vs. no-coverage, per-mutator breakdown, and which survivors actually matter.
Kill surviving mutants
Turn a surviving mutant into a failing test — the fastest route to tests that assert behaviour instead of just touching lines.
Wire PIT into the build
Configure PIT in Maven and Gradle, scope it to changed code, and run it fast enough to live in everyday development.
Set a gate that holds the line
Pick a defensible threshold and a CI gate that catches regressions without blocking the team on noise or equivalent mutants.
Tell real coverage from theatre
Explain to the team — and to management — why 90 % line coverage can still miss the bug, and what number is actually worth chasing.
Agenda
Six modules, each ending in a hands-on lab on real code — see the survivor, write the test, watch it die.
- Why line coverage lies
What a mutant is, how PIT rewrites bytecode, killed / survived / no-coverage.
Lab: a 100 %-line-covered class that catches nothing. - PIT up and running
PIT in Maven and Gradle, mutators, scope and reports.
Lab: first run and first report on a sample module. - Reading the report
Per-mutator breakdown, the surviving-mutant list, prioritising what matters.
Lab: triage a report into must-fix and ignore. - Killing mutants well
Writing assertions that kill mutants, test smells that let them survive.
Lab: drive a module from survivors to green. - Thresholds & CI gates
Incremental analysis, changed-code scope, a gate that holds without noise.
Lab: wire a mutation gate into a CI pipeline. - Equivalent mutants & performance
Recognising equivalent mutants, keeping runs fast on a large reactor.
Lab: tune a slow run and justify the remaining survivors.
Who it's for
Java developers, tech leads and reviewers who own their test suite's credibility — teams moving past line-coverage targets toward tests that actually defend behaviour.
Prerequisite: everyday Java and some JUnit; no prior mutation-testing experience required. Pairs naturally with JUnit 5 & 6.
Logistics
📋 Course details
- Formats
- On-site · live-online · on-demand (in preparation)
- Price
- On request — tailored to each client
- Duration
- Typically 1 day — depth and agenda tailored to your team
- Languages
- English or German
- Group size
- Private team cohorts or individual seats on scheduled dates
- Trainer
- Sven Ruppert, author of jCustos — long-time Java developer and speaker