qa-mutation-testing
Mutation testing across languages: 5 skills (mull-mutation, mutmut-mutation, pitest-mutation, stryker-mutation, stryker-net-mutation) and 2 agents (mutation-survivor-explainer, mutation-tool-selector).
Install this plugin
/plugin install qa-mutation-testing@testland-qaPart of role bundle: qa-role-sdet
qa-mutation-testing
Mutation testing across the major language ecosystems. Mutation testing inserts small bugs (mutants) into production code; if tests pass, they don't actually catch the regressions. Surviving mutants reveal weak assertions and missing edge-case tests that coverage hides.
Components
| Type | Name | Description |
|---|---|---|
| Skill | stryker-mutation | Configures StrykerJS for mutation testing of JavaScript / TypeScript / React / Vue / Svelte / Node - picks the test-runner plugin (@stryker-mutator/jest-runner, mocha-runner, vitest-runner, karma-runner), authors stryker.conf.json with mutate globs + thresholds, runs incremental mode for PRs (only mutate changed files), and reports the mutation score. Use when a JS/TS test suite has ≥80% line coverage and the team wants to verify the tests actually catch bugs (not just touch lines). |
| Skill | stryker-net-mutation | Configures Stryker.NET for mutation testing of .NET Core / .NET Framework projects - installs dotnet-stryker global tool, scopes mutation to specific csproj, supports xUnit / NUnit / MSTest, authors stryker-config.json with thresholds, runs in CI. Use when a .NET test suite needs mutation-quality verification - closes the .NET ecosystem gap left by Stryker.NET being newer than the JS variant. |
| Skill | pitest-mutation | Configures PIT (PITest) for mutation testing of JVM projects (Java, Kotlin via the Kotlin plugin) - wires the pitest-maven or pitest-gradle-plugin with mutationThreshold, coverageThreshold, target classes/tests filtering, runs mvn pitest:mutationCoverage, parses the HTML + XML reports. Use when the JVM suite needs mutation-quality verification - the canonical Java mutation testing tool, fast (PIT analyzes "in minutes rather than days"). |
| Skill | mutmut-mutation | Configures mutmut for Python mutation testing - pip install mutmut, runs via mutmut run, browses results via mutmut browse or mutmut results, applies surviving mutants to disk via mutmut apply <id>, suppresses with # pragma: no mutate annotations. Configures via setup.cfg / pyproject.toml with source_paths + per-test selection. Use for Python codebases needing mutation-quality verification of pytest / unittest suites. |
| Skill | mull-mutation | Configures Mull for mutation testing of C / C++ (and via LLVM IR, Swift / Rust to a lesser extent) - LLVM-based, requires building the project with Mull-compatible LLVM toolchain, runs via mull-runner against the test binary. Use when a C/C++ project needs mutation-quality verification - the canonical native-language LLVM-IR-level mutation tool. |
| Agent | mutation-survivor-explainer | Read-only investigator that takes a surviving mutant from any mutation testing tool (Stryker / PIT / mutmut / Mull / Stryker.NET) - reads the mutated line + surrounding context + the existing tests that should have caught it, classifies the survival reason (missing test case / weak assertion / equivalent mutant / unreachable code), and proposes the specific test to write to kill the mutant. Use after a mutation run when 5+ mutants survived and the team wants help triaging which to address first. |
| Agent | mutation-tool-selector | Action-taking agent that reads a target project's language + test framework (from package.json, pom.xml, pyproject.toml, *.csproj, CMakeLists.txt) and recommends ONE mutation testing tool - Stryker (JS/TS), Stryker.NET (.NET), PIT (JVM), Mutmut (Python), or Mull (C/C++) - plus rationale and the preloaded SKILL.md to read next. Distinct from qa-mutation-testing/mutation-survivor-explainer (A1 that reads existing mutation results to explain why mutants survived - this agent picks WHICH tool to run). Use when starting a new mutation-testing project and the team has not yet committed to a tool. |
Install
/plugin marketplace add testland/qa
/plugin install qa-mutation-testing@testland-qaSkills
mull-mutation
Runs Mull, the LLVM-IR mutation testing tool, against C/C++ test binaries built with Clang: covers install (the version-matched mull-NN package), the -fpass-plugin build flags for the Mull IR frontend, mull-runner invocation, the mutator catalog, path filtering, and GitHub Actions CI. Use when a C or C++ project needs mutation-score verification with the tool already chosen. Does not select among mutation tools (use mutation-tool-selector for that) and does not cover other languages (stryker-mutation for JS/TS, stryker-net-mutation for .NET, pitest-mutation for the JVM, mutmut-mutation for Python).
mutmut-mutation
Configures mutmut for Python mutation testing - `pip install mutmut`, runs via `mutmut run`, browses results via `mutmut browse` or `mutmut results`, applies surviving mutants to disk via `mutmut apply <id>`, suppresses with `# pragma: no mutate` annotations. Configures via `setup.cfg` / `pyproject.toml` with `source_paths` + per-test selection. Use for Python codebases needing mutation-quality verification of pytest / unittest suites.
pitest-mutation
Configures PIT (PITest) for mutation testing of JVM projects (Java, Kotlin via the Kotlin plugin) - wires the `pitest-maven` or `pitest-gradle-plugin` with `mutationThreshold`, `coverageThreshold`, target classes/tests filtering, runs `mvn pitest:mutationCoverage`, parses the HTML + XML reports. Use when the JVM suite needs mutation-quality verification - the canonical Java mutation testing tool, fast (PIT analyzes "in minutes rather than days").
stryker-mutation
Configures StrykerJS for mutation testing of JavaScript / TypeScript / React / Vue / Svelte / Node - picks the test-runner plugin (`@stryker-mutator/jest-runner`, `mocha-runner`, `vitest-runner`, `karma-runner`), authors `stryker.conf.json` with mutate globs + thresholds, runs incremental mode for PRs (only mutate changed files), and reports the mutation score. Use when a JS/TS test suite has ≥80% line coverage and the team wants to verify the tests actually catch bugs (not just touch lines).
stryker-net-mutation
Configures Stryker.NET for mutation testing of .NET Core / .NET Framework projects - installs `dotnet-stryker` global tool, scopes mutation to specific csproj, supports xUnit / NUnit / MSTest, authors `stryker-config.json` with thresholds, runs in CI. Use when a .NET test suite needs mutation-quality verification - closes the .NET ecosystem gap left by Stryker.NET being newer than the JS variant.
Agents
mutation-survivor-explainer
Read-only investigator that takes a surviving mutant from any mutation testing tool (Stryker / PIT / mutmut / Mull / Stryker.NET) - reads the mutated line + surrounding context + the existing tests that should have caught it, classifies the survival reason (missing test case / weak assertion / equivalent mutant / unreachable code), and proposes the specific test to write to kill the mutant. Use after a mutation run when 5+ mutants survived and the team wants help triaging which to address first.
mutation-tool-selector
Action-taking agent that reads a target project's language + test framework (from `package.json`, `pom.xml`, `pyproject.toml`, `*.csproj`, `CMakeLists.txt`) and recommends ONE mutation testing tool - Stryker (JS/TS), Stryker.NET (.NET), PIT (JVM), Mutmut (Python), or Mull (C/C++) - plus rationale and the preloaded SKILL.md to read next. Distinct from `qa-mutation-testing/mutation-survivor-explainer` (reads existing mutation results to explain why mutants survived - this agent picks WHICH tool to run). Use when starting a new mutation-testing project and the team has not yet committed to a tool.