Use for any question about mutation testing in .NET or C#, or when a .NET suite passes with good coverage but may assert nothing: sets up Stryker.NET (dotnet-stryker tool, project and solution scoping, xUnit, NUnit or MSTest, stryker-config.json thresholds) and runs it in CI. Has a worked example and mutator levels.
97%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Full mutator set and configuration options for stryker-net-mutation. Linked
inline from that skill's SKILL.md, which keeps the conditional-boundary example
in the spine.
A surviving mutant means the test suite doesn't distinguish the original behavior from the mutated one. Common mutators:
| Mutator | Example |
|---|---|
| Arithmetic operator | + → -, * → / |
| Conditional boundary | < → <=, > → >= |
| Conditional negation | !x → x |
| Logical operator | && → || |
| Equality | == → != |
| Return value | return foo() → return null / return "" / return 0 |
| Statement removal | Foo(); → ; |
| String literal | "x" → "" |
mutation-level controls how many of these run:
Basic (fewest mutators)Standard (default, recommended)AdvancedComplete (most mutators; slowest)Per stryker-net-config, every option nests under a single stryker-config
root object; Stryker.NET publishes no JSON schema, so there is no $schema key.
Core keys: project, test-projects, mutation-level, thresholds (high /
low / break), concurrency, reporters. Command-line flags mirror them, for
example --solution (multi-project discovery), --project, --mutate (scope /
exclude files), and --break-at <baseline> for the CI gate.