Microsoft Testing Platform runner (preview)
Stryker.NET leunt al lange tijd op VSTest als test runner. VSTest werkt prima, maar heeft een fundamentele beperking: Stryker moet voor elke mutation test run een compleet nieuw VSTest-proces opstarten. Bij grote test suites loopt die startup overhead snel in de papieren.
Microsoft heeft gebouwd aan een modern alternatief, genaamd het Microsoft Testing Platform (MTP). MTP wordt inmiddels omarmd door alle grote testing frameworks (MSTest, NUnit, en xUnit v3) en het is de enige ondersteunde runner voor nieuwere frameworks zoals TUnit. Tot nu toe konden projecten die deze frameworks gebruikten, Stryker.NET helemaal niet inzetten.
Daarom is het goed nieuws dat MTP-support nu als preview beschikbaar is in Stryker.NET 4.13.
Hoe schakel je het in
Je kunt de MTP runner inschakelen door --test-runner mtp mee te geven op de command line:
dotnet stryker --test-runner mtp.
Of voeg het toe aan je stryker-config.json:
Of voeg het toe aan je stryker-config.json:
{
"stryker-config": {
"test-runner": "mtp"
}
}
Of in je stryker-config.yaml:
stryker-config:
test-runner: mtp
Performance voordelen
Omdat MTP is ontworpen om embedded te zijn en uitgebreid te worden, in plaats van een op zichzelf staand extern proces, kan Stryker de test runner in de lucht houden over meerdere mutation test runs heen. Dit elimineert de opstartkosten per run die VSTest traag maakten bij grotere projecten. De verwachting is dan ook dat dit een aanzienlijke performanceverbetering gaat opleveren.
Preview status: waar nog aan gewerkt wordt
Hoewel we erg enthousiast zijn over de verwachte performance, is het goed om te vermelden dat de MTP runner momenteel een preview feature is. Omdat we het onder de motorkap nog aan het finetunen zijn, is deze nieuwe runner wellicht nog niet voor elke projectconfiguratie de perfecte match.
Zo is coverage analysis bijvoorbeeld pas gedeeltelijk geïmplementeerd: Stryker kan al wel mutanten wegfilteren die door geen enkele test worden geraakt (covered), maar het kan nog niet individuele test cases per mutant filteren. Aan deze volledige per-test coverage analysis wordt nog gewerkt. Daarnaast ondersteunt de MTP runner op dit moment nog geen .NET Framework testprojecten (zie #3421).
We hebben jouw feedback nodig!
Omdat dit een preview feature is, is jullie feedback essentieel. Mocht je tegen problemen aanlopen of onverwachte resultaten krijgen bij het gebruik van de MTP runner, dan help je ons door een issue aan te maken op GitHub of ons een bericht te sturen via ons Slack-kanaal.
Andere noemenswaardige updates
Hier zijn de belangrijkste highlights.
Nieuwe mutators
Er zijn twee nieuwe mutatie-categorieën toegevoegd aan het arsenaal van Stryker.NET.
String method mutaties (stringmethod):
Stryker muteert nu veelgebruikte string manipulation methodes. Bijvoorbeeld:
| Origineel | Gemuteerd |
|---|---|
ToUpper() |
ToLower() |
ToLower() |
ToUpper() |
Trim() |
"" |
TrimStart() |
TrimEnd() |
TrimEnd() |
TrimStart() |
StartsWith() |
EndsWith() |
EndsWith() |
StartsWith() |
PadLeft() |
PadRight() |
IndexOf() |
LastIndexOf() |
Substring() |
"" |
Deze mutaties zijn bijzonder goed in het opsporen van code waarbij de richting of casing van een string-operatie nooit daadwerkelijk is getest.
List pattern mutaties:
Stryker muteert nu C# list pattern syntax. Wanneer code is [...] patterns gebruikt om de structuur van een collectie te matchen, zal Stryker testen of dat pattern er daadwerkelijk toe doet door elementen te verwisselen of te verwijderen. Dit brengt mutation testing naar een moderne en steeds populairder wordende C# feature.
YAML config file support
Stryker configuratiebestanden kunnen nu, naast JSON, ook in YAML geschreven worden. Als je de voorkeur geeft aan YAML, maak dan simpelweg een stryker-config.yaml (of stryker-config.yml) bestand aan naast je project:
stryker-config:
project: 'MyProject.csproj'
reporters:
- html
- progress
thresholds:
high: 80
low: 60
Het bestand wordt automatisch opgepikt, zonder dat er extra opties nodig zijn.
Feedback is welkom
Er valt weer genoeg te ontdekken. We zijn vooral enthousiast over de MTP runner en de deuren die dit opent voor teams die xUnit v3, de nieuwe MTP-modus van NUnit, of het uitstekende TUnit framework gebruiken. Probeer het eens uit en laat ons weten wat je ervan vindt!
Zoals altijd horen we graag jullie mening op ons Slack-kanaal of via een open issue op GitHub.
