-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Enhance mutation testing documentation with new sections #50594
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
79e8626
f2dd3f3
929f19b
e9c6588
d40ec4e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -110,6 +110,62 @@ Stryker supports several types of mutations: | |||||||||
|
|
||||||||||
| For additional mutation types, see the [Stryker.NET: Mutations](https://stryker-mutator.io/docs/stryker-net/mutations) documentation. | ||||||||||
|
|
||||||||||
| ## Interpret mutation testing results | ||||||||||
|
|
||||||||||
| After running Stryker.NET, you'll receive a report that categorizes mutants as **killed**, **survived**, or **timeout**. Here's how to interpret and act on these results: | ||||||||||
|
|
||||||||||
| - **Killed**: These are changes that your tests successfully caught. A high number of killed mutants indicates that your test suite effectively detects logic errors. | ||||||||||
|
|
||||||||||
| - **Survived**: These changes weren't caught by your tests. Review them to identify gaps in test coverage or assertions that are too weak. Focus on adding targeted unit tests that would fail if the mutant were real. | ||||||||||
|
|
||||||||||
| - **Timeout**: These mutations caused your code to hang or exceed the allowed time. This can happen with infinite loops or unoptimized paths. Investigate the code logic or increase the timeout threshold if needed. | ||||||||||
|
|
||||||||||
| > [!NOTE] | ||||||||||
| > Don't chase a 100% mutation score. Instead, focus on high-risk or business-critical areas where undetected bugs would be most costly. | ||||||||||
|
|
||||||||||
| ## Adding mutation testing to your CI/CD workflow | ||||||||||
cosminvladutu marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
|
|
||||||||||
| You can seamlessly integrate mutation testing into your continuous integration and delivery workflows. For instance, Stryker.NET can be configured to run within your Azure Pipelines or GitHub Actions setup, allowing you to enforce quality thresholds as part of your automated testing process. | ||||||||||
|
||||||||||
|
|
||||||||||
| Add the following to your `stryker-config.json` file to set mutation score thresholds: | ||||||||||
|
|
||||||||||
| ```json | ||||||||||
| { | ||||||||||
| "thresholds": { | ||||||||||
| "high": 85, | ||||||||||
| "low": 65, | ||||||||||
| "break": 0 | ||||||||||
| } | ||||||||||
| } | ||||||||||
| ``` | ||||||||||
|
|
||||||||||
| ## Customization | ||||||||||
|
|
||||||||||
| Besides setting thresholds for your pipeline, Stryker.NET offers the possibility of having different configurations for each of your project needs. You can do this customization of behavior using the _stryker-config.json_ file. | ||||||||||
|
||||||||||
|
|
||||||||||
| ```json | ||||||||||
| { | ||||||||||
| "ignore-mutations": [ | ||||||||||
| "ToString", | ||||||||||
| "Equals", | ||||||||||
| "GetHashCode" | ||||||||||
| ], | ||||||||||
| "ignore-methods": [ | ||||||||||
| "*Logs" | ||||||||||
| ] | ||||||||||
|
||||||||||
| ] | |
| ], |
Copilot
AI
Dec 28, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The JSON configuration is missing a comma after the closing bracket of the "ignore-mutations" array. This will cause a JSON parsing error. Add a comma after line 152 before "ignore-methods".
| ] | |
| ], |
cosminvladutu marked this conversation as resolved.
Show resolved
Hide resolved
Copilot
AI
Dec 28, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The phrase "or you consider not needed" is grammatically incorrect. Change it to "or you consider them not needed" or better yet, simplify to "or aren't needed" to follow the guideline of using contractions and simpler language.
Copilot
AI
Dec 28, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The description list items should use consistent punctuation. Since these are complete sentences, add a period at the end of line 164 to match the style of line 165.
Copilot
AI
Dec 28, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This sentence has a grammatical error and doesn't follow the guideline to use simple, concise language. Consider rephrasing to: "Also, these appear in your reports as Ignored." or better yet, "These also appear in your reports as Ignored." using active voice.
Copilot
AI
Dec 28, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The phrase "everything inside a Migrations folder" is missing proper Markdown formatting. According to the guidelines, file names and folders should use code formatting. Change "Migrations" to "Migrations" for consistency with the code formatting convention.
Copilot
AI
Dec 28, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The phrase "all .Designer.cs files" should use code formatting instead of italic. According to the guidelines, file names should use code formatting. Change ".Designer.cs" to ".Designer.cs" for consistency.
Copilot
AI
Dec 28, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's an extra space before the closing parenthesis. Remove the space before the period in "(which are usually autogenerated) ." to make it "(which are usually autogenerated)."
| - **mutate**: Without this option, Stryker will try to mutate all the files in your project. With this, you can ignore files or entire folders. In the example above, we ignore everything inside a _Migrations_ folder and all _.Designer.cs_ files (which are usually autogenerated) . | |
| - **mutate**: Without this option, Stryker will try to mutate all the files in your project. With this, you can ignore files or entire folders. In the example above, we ignore everything inside a _Migrations_ folder and all _.Designer.cs_ files (which are usually autogenerated). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
According to the Markdown writing style guidelines, lists should use complete sentences with proper punctuation. The list items on lines 117-121 are complete sentences but only the last item has a period. Add periods to the end of lines 117 and 119 for consistency.