Skip to content

Octopusy-dev/MutationTestingInCSharp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mutation testing en C# avec Stryker.NET

pour lire correctement ce readme installer l'extension "Markdown Editor v2"

Introduction

Le but des tests de mutation est de tester nos tests unitaires. En effet, il est possible d'avoir des tests unitaires qui passent mais qui ne sont pas suffisamment robustes. Les tests de mutation permettent de vérifier la qualité de nos tests unitaires en modifiant le code source et en vérifiant si les tests unitaires échouent. Si les tests unitaires passent, c'est que les tests unitaires ne sont pas assez robustes.

Objectif

L'objectif est simple il s'agit de tester nos tests pour verifier leur robustesse. 😃

Les bases

Le mutant

Un mutant est une version modifiée du code source. Prenont par exemple le code source suivant :

public static int Sum(int number1, int number2) => number1 + number2;

son mutant sera

public static int Sum(int number1, int number2) => number1 - number2;

Ce qui a changer ici c'est le signe + qui est devenu un -.

Le principe est le suivant on prend un operateur et on le remplace par son opposé

  • le + deviens un -
  • le - deviens un +
  • le * deviens une /
  • le / deviens un *

Bref tu as compris le principe 😉 Je te met ici la source pour le reste des opérateurs Supported mutators

Killed et Survived

  • ☑️ Killed : Lorsqu’au moins un test échoue alors que ce mutant était actif, le mutant est tué. C'est ce que vous voulez, bon travail !
  • ❎ Survived : Si tous les tests passent, le mutant a survécu. C'est mauvais, vous devez améliorer vos tests.

Ce qui veut dire que pour que tes test de mutation passe tu doit tous les tuer , meme highlander ne doit pas survivre, il ne peut en rester aucun.

Et du coup ?

Et bien voila comment ca se passe, stryker va generer des mutants et les tester avec vos tests unitaires. Si on as que des morts c'est que nos tests sont robustes, sinon il faudra les ameliorer.

Process

Installation de l'utilitaire

Pour installer l'utilitaire, il suffit de lancer la commande suivante dans le terminal de Visual Studio Code Le -g permet d'installer l'utilitaire de maniere global

dotnet tool install -g dotnet-stryker

Lancer les tests de mutation

  • Placer vous dans le projet MyLibraryTests
  • Ouvrer une ligne de commande
  • Executer la commande suivante
dotnet stryker

Vous devez avoir le resultat ci-dessous, on remarque que Killed est a 0 et Survived a 1 Pour que le test soit valide il faut que Killed soit superieur a 0 et Survived a 0 On peut voir dans le rapport la transformation que le code tester a subit

Mutation Report 01

Amelioration des tests

Maintenant on va modifier notre test unitaire pour qu'il soit plus robuste et qu'il tue le mutant. Rajouter dans le fichier UnitTest1.cs la ligne suivante dans le bloc theory, ou cdecommante la ligne 11 du fichier

[InlineData(1, 1, 2)]

Youhou cette fois ci notre mutant a bien ete tuer , bye bye mutant 😃 Tu peut verifier dans le rapport ce resultat

Report 02

Pour aller plus loin

  • c'est integrable dans un pipeline de CI/CD 😏

Sources

About

Project to understand mutation testing in Ç#

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages