SlideShare una empresa de Scribd logo
1 de 14
Rédaction de Tests
Unitaires avec les Fakes
de Microsoft
À propos de moi
 Presque 14 ans d'expérience en développement, dont 13 en
.Net
 Tech Lead au Ministère de l'Immigration pour le compte de
CGI
 Étudiant à la Maîtrise en Génie Logiciel à l'École de
Technologie Supérieure
 Passionné par l'ergonomie, l'architecture logicielle et
l’intelligence artificielle
Ma dernière conférence au Groupe des Développeurs
Microsoft Montréal remonte à plus de 10 ans
Pourquoi rédiger des tests unitaires?
 C'est le filet de sécurité qui nous permet de valider les
changements qui sont faits à une méthode
 Les tests unitaires nous forcent à remettre en question la
conception interne d'une méthode
 Ils vérifient que les bonnes données donnent les bonnes
résultats, mais aussi que les mauvaises données sont gérées
adéquatement (happy path vs alternate/exceptions path)
Qu'est-ce que les Fakes*?
 C'est le Framework pour écrire des tests unitaires de
Microsoft. Il a été introduit dans VS 2012.
 Nécessite la .dll:
Microsoft.VisualStudio.QualityTools.UnitTestFramework
 Comparable à Isolator de la compagnie TypeMock.
Les Fakes ne peuvent pas être utilisés avec VS 2010
*Avant 2012, il y avait les Moles. Ceux-ci sont devenus les Fakes, mais des
modifications sont requises pour passer de Moles à Fakes
Qu'est-ce que les Stubs?
 Dans le framework des Fakes, les stubs fonctionnent de la
même façon que les autres frameworks classiques (NUnit,
RhinoMock, MOQ)
 Ce sont des objets vides qui implémente un interface avec du
code qui ne fait rien, ou presque.
 On a la capacité de spécifier ce que l’on désire qui soit fait
quand un appel de méthode est fait.
 Ils sont idéals pour limiter la portée de la méthode que l’on
désire tester
 Ce devrait être l’outil le plus utilisé quand l’architecture de
votre solution a été fait pour limiter le couplage et maximiser
la cohésion, car il requièrent que la classe utilise un interface.
Qu'est-ce que les Shims?
 Les shims ont été développés pour permettre d'isoler votre code des librairies qui
sont externes à votre solution.
 C’est l’équivalent des mocks dans le framework Fakes, mais ceux-ci ont des
capacités que les mocks n’ont habituellement pas. Comme un mock, un shim est
une copie complète ou partielle de la classe choisie.
 Comme les mocks, ils permettent de créer un détour sur les méthodes choisies.
 Ils permettent aussi d’intercepter des appels au constructeurs ainsi qu’au
méthodes statiques!
Mscorlib ne peut pas être le sujet de shim, ni la plupart de l'assembly System
(mauvaise idée!)
Aperçu visuel
DEMO : fichiers .fakes
 Génération Fake.dll
 Fichier configuration
 Diagnostic
 Avertissements
 Sealed, private*
 Shim & interfaces
 Stub
 Add, Remove, Clear
 Shim
 Add, Remove, Clear
 Compilation*
DEMO: Stub
 Création d’un stub
 Spécification du résultat d’un appel de méthode
 Spécification d’une méthode déléguée
Démo: Shim
 ShimContext.Create()
 Behavior
 Fallthrough: operation régulière de la classe
 BehaveAsCurrent  dépend du mode.
 BehaveAsNotImplemented
 Constructor, StaticConstructor
 AllInstances vs Instance spécifique
Problèmes rencontrés avec les Fakes
 Il semble y avoir certains cas où les shims ne fonctionnent pas lorsque les
tests unitaires sont exécutés en groupe. Individuellement, il n’y a pas de
problème. Le cas est lié au vstest.executionengine.x86 qui n’est soit pas
compatible ou ne démarre pas. Ceci se produit dans le cas où:
 On utilise un serveur de compilation non-TFS;
 On essaie d’obtenir la couverture du code lorsqu’il y a un fichier de
configuration «Test settings»
 Solution: sur le serveur, on a créé un filtre qui exclu l’exécution des tests avec
l’attribut [TestCategory(« shim »)]. Les tests avec des Shims sont vérifiés sur les
postes de développeurs.
 Avec un serveur de compilation qui n’est pas TFS (TeamCity, pour être
précis) il semble se produire un cas étrange lorsque nous avons des
projets de tests multiples qui utilisent les mêmes .dll de fakes. Il s’agit
d’une sorte de « race condition » où le premier qui résout la .dll
fonctionne, mais les autres entrent en conflit.
 Solution: mettre tous les tests dans un seul projet, regroupé dans des dossiers
différents.
Créer des tests qui utilisent la réflexion
 Lorsqu’on a une certaine quantité de classes qui sont identiques en grande partie
au point de vue fonctionnel, il y a possibilité de couvrir un ensemble de tests par
réflexion.
 Idéalement, les tests devraient être refactorisés en utilisant un pattern approprié
(i.e. Template Method)
 Mais si ce n’est pas possible:
 Assembly.Load
Conclusion
 Le framework de Fakes est intéressant par sa capacité de
faire les choses. Toutefois, certains le considère
« dangereux » parce qu’il permet de faire des choses qui
devraient être résolues par une architecture appropriée.
 Toutefois, de façon pratique, on a pas toujours le choix.
 Il est simple à utiliser une fois qu’on est familier avec et que
les configurations sont faites.
Références
 http://blogs.msdn.com/b/ajayarora/archive/2014/03/28/configuring-fakes.aspx
 https://msdn.microsoft.com/en-us/library/hh549175.aspx
 https://msdn.microsoft.com/en-us/library/hh549176.aspx
 http://martinfowler.com/articles/mocksArentStubs.html

Más contenido relacionado

La actualidad más candente

Ecrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenableEcrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenableChristophe Villeneuve
 
ALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowMathias Kluba
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverteEric Mignot
 
TDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringTDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringneuros
 
Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLes Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLy-Jia Goldstein
 
Introduction aux tests automatisés et au TDD (v. 2016-08)
 Introduction aux tests automatisés et au TDD (v. 2016-08) Introduction aux tests automatisés et au TDD (v. 2016-08)
Introduction aux tests automatisés et au TDD (v. 2016-08)Elapse Technologies
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
 

La actualidad más candente (11)

Coder propre !
Coder propre !Coder propre !
Coder propre !
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 
Ecrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenableEcrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenable
 
ALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - Specflow
 
Université du soir - TDD
Université du soir - TDDUniversité du soir - TDD
Université du soir - TDD
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverte
 
TDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringTDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoring
 
Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLes Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des Tests
 
Introduction aux tests automatisés et au TDD (v. 2016-08)
 Introduction aux tests automatisés et au TDD (v. 2016-08) Introduction aux tests automatisés et au TDD (v. 2016-08)
Introduction aux tests automatisés et au TDD (v. 2016-08)
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 
Bbl sur les tests
Bbl sur les testsBbl sur les tests
Bbl sur les tests
 

Destacado

Avant-Projet de Code de la Consommation par le ministère du Commerce de Cote ...
Avant-Projet de Code de la Consommation par le ministère du Commerce de Cote ...Avant-Projet de Code de la Consommation par le ministère du Commerce de Cote ...
Avant-Projet de Code de la Consommation par le ministère du Commerce de Cote ...Geoffroy Nasset
 
Présentation Apéromix Muséomix Léman - 08 Avril 2014
Présentation Apéromix Muséomix Léman - 08 Avril 2014Présentation Apéromix Muséomix Léman - 08 Avril 2014
Présentation Apéromix Muséomix Léman - 08 Avril 2014Leila BOUANANI
 
La durabilité, nouvel horizon du lean 6 sigma
La durabilité, nouvel horizon du lean 6 sigmaLa durabilité, nouvel horizon du lean 6 sigma
La durabilité, nouvel horizon du lean 6 sigmaEcosysmis
 
Vivre en Guadeloupe - L'attractivité de la Guadeloupe
Vivre en Guadeloupe - L'attractivité de la GuadeloupeVivre en Guadeloupe - L'attractivité de la Guadeloupe
Vivre en Guadeloupe - L'attractivité de la GuadeloupeJulie Province
 
Store manager intuiko
Store manager intuikoStore manager intuiko
Store manager intuikoINTUIKOFRANCE
 
Grunt, Bower, Yeoman ou comment automatiser un projet web SPA
Grunt, Bower, Yeoman ou comment automatiser un projet web SPAGrunt, Bower, Yeoman ou comment automatiser un projet web SPA
Grunt, Bower, Yeoman ou comment automatiser un projet web SPATouchify
 
Avons-nous un rôle à jouer à titre de professionnels dans la question des mod...
Avons-nous un rôle à jouer à titre de professionnels dans la question des mod...Avons-nous un rôle à jouer à titre de professionnels dans la question des mod...
Avons-nous un rôle à jouer à titre de professionnels dans la question des mod...Daniel Marquis
 
Information metier hotellerie restauration management du service en restaurat...
Information metier hotellerie restauration management du service en restaurat...Information metier hotellerie restauration management du service en restaurat...
Information metier hotellerie restauration management du service en restaurat...Emploi Hotellerie Restauration
 
Les signataires engagement climat
Les signataires engagement climatLes signataires engagement climat
Les signataires engagement climatRAC-F
 
Fiches observation groupe gleize
Fiches observation groupe gleizeFiches observation groupe gleize
Fiches observation groupe gleizemerlin69
 
Table ronde : Les réseaux de distribution de la destination Provence à l'inte...
Table ronde : Les réseaux de distribution de la destination Provence à l'inte...Table ronde : Les réseaux de distribution de la destination Provence à l'inte...
Table ronde : Les réseaux de distribution de la destination Provence à l'inte...paysdaix
 
Presentation croquis pak wan
Presentation croquis pak wanPresentation croquis pak wan
Presentation croquis pak wansalleherodote
 

Destacado (20)

Avant-Projet de Code de la Consommation par le ministère du Commerce de Cote ...
Avant-Projet de Code de la Consommation par le ministère du Commerce de Cote ...Avant-Projet de Code de la Consommation par le ministère du Commerce de Cote ...
Avant-Projet de Code de la Consommation par le ministère du Commerce de Cote ...
 
Atelier Google+local Vallée Dordogne Forêt Bessède
Atelier Google+local Vallée Dordogne Forêt BessèdeAtelier Google+local Vallée Dordogne Forêt Bessède
Atelier Google+local Vallée Dordogne Forêt Bessède
 
Le manuel numérique : introduction
Le manuel numérique : introductionLe manuel numérique : introduction
Le manuel numérique : introduction
 
Présentation Apéromix Muséomix Léman - 08 Avril 2014
Présentation Apéromix Muséomix Léman - 08 Avril 2014Présentation Apéromix Muséomix Léman - 08 Avril 2014
Présentation Apéromix Muséomix Léman - 08 Avril 2014
 
Grafieken
GrafiekenGrafieken
Grafieken
 
La durabilité, nouvel horizon du lean 6 sigma
La durabilité, nouvel horizon du lean 6 sigmaLa durabilité, nouvel horizon du lean 6 sigma
La durabilité, nouvel horizon du lean 6 sigma
 
Vivre en Guadeloupe - L'attractivité de la Guadeloupe
Vivre en Guadeloupe - L'attractivité de la GuadeloupeVivre en Guadeloupe - L'attractivité de la Guadeloupe
Vivre en Guadeloupe - L'attractivité de la Guadeloupe
 
Pictures
PicturesPictures
Pictures
 
Store manager intuiko
Store manager intuikoStore manager intuiko
Store manager intuiko
 
Grunt, Bower, Yeoman ou comment automatiser un projet web SPA
Grunt, Bower, Yeoman ou comment automatiser un projet web SPAGrunt, Bower, Yeoman ou comment automatiser un projet web SPA
Grunt, Bower, Yeoman ou comment automatiser un projet web SPA
 
Avons-nous un rôle à jouer à titre de professionnels dans la question des mod...
Avons-nous un rôle à jouer à titre de professionnels dans la question des mod...Avons-nous un rôle à jouer à titre de professionnels dans la question des mod...
Avons-nous un rôle à jouer à titre de professionnels dans la question des mod...
 
Information metier hotellerie restauration management du service en restaurat...
Information metier hotellerie restauration management du service en restaurat...Information metier hotellerie restauration management du service en restaurat...
Information metier hotellerie restauration management du service en restaurat...
 
The Device
The DeviceThe Device
The Device
 
Assises tourisme paca atelier 2
Assises tourisme paca atelier 2Assises tourisme paca atelier 2
Assises tourisme paca atelier 2
 
Accompagnement des seniors
Accompagnement des seniorsAccompagnement des seniors
Accompagnement des seniors
 
Les signataires engagement climat
Les signataires engagement climatLes signataires engagement climat
Les signataires engagement climat
 
Fiches observation groupe gleize
Fiches observation groupe gleizeFiches observation groupe gleize
Fiches observation groupe gleize
 
Table ronde : Les réseaux de distribution de la destination Provence à l'inte...
Table ronde : Les réseaux de distribution de la destination Provence à l'inte...Table ronde : Les réseaux de distribution de la destination Provence à l'inte...
Table ronde : Les réseaux de distribution de la destination Provence à l'inte...
 
Par#12
Par#12Par#12
Par#12
 
Presentation croquis pak wan
Presentation croquis pak wanPresentation croquis pak wan
Presentation croquis pak wan
 

Similar a Rédaction de tests unitaires avec fakes

Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db firstZineb ELGARRAI
 
AgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFSAgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFSAgile Toulouse
 
TFS 2012 : un pas vers l'agilité... en avant ou en arrière ?
TFS 2012 : un pas vers l'agilité... en avant ou en arrière ? TFS 2012 : un pas vers l'agilité... en avant ou en arrière ?
TFS 2012 : un pas vers l'agilité... en avant ou en arrière ? Christophe HERAL
 
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement MicrosoftChristophe HERAL
 
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...Sébastien Levert
 
Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.AZUG FR
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes PratiquesEmmanuel Hugonnet
 
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4
Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4Emmanuel Hugonnet
 
Patrons de creation
Patrons de creationPatrons de creation
Patrons de creationomri med
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation SymfonyJeremy Gachet
 
[PFE] Master en ingénierie du logiciel
[PFE] Master en ingénierie du logiciel[PFE] Master en ingénierie du logiciel
[PFE] Master en ingénierie du logicielUSTHB & DELTALOG
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilNormandy JUG
 
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015  dev-pragmatique-bonnes-pratiquesWordcamp paris 2015  dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiquesSylvie Clément
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsOCTO Technology
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation Microsoft
 
Presentation du framework symfony
Presentation du framework symfonyPresentation du framework symfony
Presentation du framework symfonyJeremy Gachet
 

Similar a Rédaction de tests unitaires avec fakes (20)

Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
 
AgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFSAgileTour Toulouse 2012 : TFS
AgileTour Toulouse 2012 : TFS
 
TFS 2012 : un pas vers l'agilité... en avant ou en arrière ?
TFS 2012 : un pas vers l'agilité... en avant ou en arrière ? TFS 2012 : un pas vers l'agilité... en avant ou en arrière ?
TFS 2012 : un pas vers l'agilité... en avant ou en arrière ?
 
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
 
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
 
Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
 
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4
Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4
 
Patrons de creation
Patrons de creationPatrons de creation
Patrons de creation
 
Etude des Frameworks PHP
Etude des Frameworks PHPEtude des Frameworks PHP
Etude des Frameworks PHP
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation Symfony
 
[PFE] Master en ingénierie du logiciel
[PFE] Master en ingénierie du logiciel[PFE] Master en ingénierie du logiciel
[PFE] Master en ingénierie du logiciel
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice Duteil
 
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015  dev-pragmatique-bonnes-pratiquesWordcamp paris 2015  dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les fronts
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation
 
Flex Unit Testing
Flex Unit TestingFlex Unit Testing
Flex Unit Testing
 
Normandy JUG integration Continue
Normandy JUG integration ContinueNormandy JUG integration Continue
Normandy JUG integration Continue
 
Presentation du framework symfony
Presentation du framework symfonyPresentation du framework symfony
Presentation du framework symfony
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 

Más de MSDEVMTL

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.netMSDEVMTL
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2MSDEVMTL
 
Property based testing
Property based testingProperty based testing
Property based testingMSDEVMTL
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureMSDEVMTL
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataMSDEVMTL
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new featuresMSDEVMTL
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3MSDEVMTL
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018MSDEVMTL
 
Api gateway
Api gatewayApi gateway
Api gatewayMSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsMSDEVMTL
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureMSDEVMTL
 
Data science presentation
Data science presentationData science presentation
Data science presentationMSDEVMTL
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...MSDEVMTL
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreMSDEVMTL
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsMSDEVMTL
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageMSDEVMTL
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de casMSDEVMTL
 

Más de MSDEVMTL (20)

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.net
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2
 
Property based testing
Property based testingProperty based testing
Property based testing
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft Azure
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & Data
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new features
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
 
Api gateway
Api gatewayApi gateway
Api gateway
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environments
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts Azure
 
Data science presentation
Data science presentationData science presentation
Data science presentation
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api core
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling Average
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de cas
 

Rédaction de tests unitaires avec fakes

  • 1. Rédaction de Tests Unitaires avec les Fakes de Microsoft
  • 2. À propos de moi  Presque 14 ans d'expérience en développement, dont 13 en .Net  Tech Lead au Ministère de l'Immigration pour le compte de CGI  Étudiant à la Maîtrise en Génie Logiciel à l'École de Technologie Supérieure  Passionné par l'ergonomie, l'architecture logicielle et l’intelligence artificielle Ma dernière conférence au Groupe des Développeurs Microsoft Montréal remonte à plus de 10 ans
  • 3. Pourquoi rédiger des tests unitaires?  C'est le filet de sécurité qui nous permet de valider les changements qui sont faits à une méthode  Les tests unitaires nous forcent à remettre en question la conception interne d'une méthode  Ils vérifient que les bonnes données donnent les bonnes résultats, mais aussi que les mauvaises données sont gérées adéquatement (happy path vs alternate/exceptions path)
  • 4. Qu'est-ce que les Fakes*?  C'est le Framework pour écrire des tests unitaires de Microsoft. Il a été introduit dans VS 2012.  Nécessite la .dll: Microsoft.VisualStudio.QualityTools.UnitTestFramework  Comparable à Isolator de la compagnie TypeMock. Les Fakes ne peuvent pas être utilisés avec VS 2010 *Avant 2012, il y avait les Moles. Ceux-ci sont devenus les Fakes, mais des modifications sont requises pour passer de Moles à Fakes
  • 5. Qu'est-ce que les Stubs?  Dans le framework des Fakes, les stubs fonctionnent de la même façon que les autres frameworks classiques (NUnit, RhinoMock, MOQ)  Ce sont des objets vides qui implémente un interface avec du code qui ne fait rien, ou presque.  On a la capacité de spécifier ce que l’on désire qui soit fait quand un appel de méthode est fait.  Ils sont idéals pour limiter la portée de la méthode que l’on désire tester  Ce devrait être l’outil le plus utilisé quand l’architecture de votre solution a été fait pour limiter le couplage et maximiser la cohésion, car il requièrent que la classe utilise un interface.
  • 6. Qu'est-ce que les Shims?  Les shims ont été développés pour permettre d'isoler votre code des librairies qui sont externes à votre solution.  C’est l’équivalent des mocks dans le framework Fakes, mais ceux-ci ont des capacités que les mocks n’ont habituellement pas. Comme un mock, un shim est une copie complète ou partielle de la classe choisie.  Comme les mocks, ils permettent de créer un détour sur les méthodes choisies.  Ils permettent aussi d’intercepter des appels au constructeurs ainsi qu’au méthodes statiques! Mscorlib ne peut pas être le sujet de shim, ni la plupart de l'assembly System (mauvaise idée!)
  • 8. DEMO : fichiers .fakes  Génération Fake.dll  Fichier configuration  Diagnostic  Avertissements  Sealed, private*  Shim & interfaces  Stub  Add, Remove, Clear  Shim  Add, Remove, Clear  Compilation*
  • 9. DEMO: Stub  Création d’un stub  Spécification du résultat d’un appel de méthode  Spécification d’une méthode déléguée
  • 10. Démo: Shim  ShimContext.Create()  Behavior  Fallthrough: operation régulière de la classe  BehaveAsCurrent  dépend du mode.  BehaveAsNotImplemented  Constructor, StaticConstructor  AllInstances vs Instance spécifique
  • 11. Problèmes rencontrés avec les Fakes  Il semble y avoir certains cas où les shims ne fonctionnent pas lorsque les tests unitaires sont exécutés en groupe. Individuellement, il n’y a pas de problème. Le cas est lié au vstest.executionengine.x86 qui n’est soit pas compatible ou ne démarre pas. Ceci se produit dans le cas où:  On utilise un serveur de compilation non-TFS;  On essaie d’obtenir la couverture du code lorsqu’il y a un fichier de configuration «Test settings»  Solution: sur le serveur, on a créé un filtre qui exclu l’exécution des tests avec l’attribut [TestCategory(« shim »)]. Les tests avec des Shims sont vérifiés sur les postes de développeurs.  Avec un serveur de compilation qui n’est pas TFS (TeamCity, pour être précis) il semble se produire un cas étrange lorsque nous avons des projets de tests multiples qui utilisent les mêmes .dll de fakes. Il s’agit d’une sorte de « race condition » où le premier qui résout la .dll fonctionne, mais les autres entrent en conflit.  Solution: mettre tous les tests dans un seul projet, regroupé dans des dossiers différents.
  • 12. Créer des tests qui utilisent la réflexion  Lorsqu’on a une certaine quantité de classes qui sont identiques en grande partie au point de vue fonctionnel, il y a possibilité de couvrir un ensemble de tests par réflexion.  Idéalement, les tests devraient être refactorisés en utilisant un pattern approprié (i.e. Template Method)  Mais si ce n’est pas possible:  Assembly.Load
  • 13. Conclusion  Le framework de Fakes est intéressant par sa capacité de faire les choses. Toutefois, certains le considère « dangereux » parce qu’il permet de faire des choses qui devraient être résolues par une architecture appropriée.  Toutefois, de façon pratique, on a pas toujours le choix.  Il est simple à utiliser une fois qu’on est familier avec et que les configurations sont faites.
  • 14. Références  http://blogs.msdn.com/b/ajayarora/archive/2014/03/28/configuring-fakes.aspx  https://msdn.microsoft.com/en-us/library/hh549175.aspx  https://msdn.microsoft.com/en-us/library/hh549176.aspx  http://martinfowler.com/articles/mocksArentStubs.html