Apprendre à faire des tests unitaires en .Net Core avec XUNIT,
Un tutoriel de Nacoumblé Olivier Martial Soro
Le 2019-11-21 00:28:57, par Malick, Community Manager
Chers membres du club,
J'ai le plaisir de vous présenter ce tutoriel d'OlivierSoro :
Bonne lecture
Retrouvez les meilleurs cours et tutoriels pour apprendre la programmation DotNET.
J'ai le plaisir de vous présenter ce tutoriel d'OlivierSoro :
Vous entendez parler des tests unitaires, des Mocks mais vous ne savez pas concrètement comment et quand les appliquer ? Ce tutoriel a pour but de vous faire comprendre ces différents concepts et de vous montrer des cas pratiques d’utilisation à travers un mini projet .Net Core.
Prérequis : niveau débutant en C# et Visual Studio (2019 de préférence).
Prérequis : niveau débutant en C# et Visual Studio (2019 de préférence).
-
OlivierSoroMembre confirméBonjour,
Merci pour tes remarques pertinentes !
1. Pas besoin de TDD pour faire des tests Unitaires
Oui on n'a pas besoin de TDD pour faire des tests unitaires mais j'en parle ici parce que c'est cette méthode qui sera utilisée tout au long du tutoriel pour écrire nos tests unitaires. Je ne voulais pas qu'on apprenne juste à écrire du test unitaire mais qu'on sache comment l'utiliser dans un projet de développement d'application.
Le TDD est la méthode que j'utilise et recommande pour l'écriture des tests unitaires.
2. Partie TDD
L'exemple n'est pas faux puisque dans la méthode TDD on commence toujours par écrire un test qui échoue. C'est ce qui a été appliqué de la manière la plus simple possible. SI ma méthode retournait directement 29 ce n'etait plus du TDD que je faisais.
Concernant les deux styles de TDD ( Classique VS Mockiste) c'est vrai que je n'en parle pas et c'est clair qu'il y'a plein de points que je n'ai pas abordé dans ce tutoriel vu que c'est un tutoriel de prise en main.
3. Partie MOCK
Je ne dis pas qu'un test ne peut pas traverser plusieurs classes de notre application. La preuve je dis bien dans le tutoriel:
Dans le cas où notre code à tester a une dépendance vers un objet inaccessible ou non implémenté, il nous faut utiliser un Mock.
En gros j'ai voulu abordé trois points: les tests unitaires, la méthode TDD et les Mocks de la manière la plus simple et compréhensible possible pour un développeur qui n'est pas encore familier avec tout ça.le 22/11/2019 à 14:30 -
DevEricMembre à l'essaiC'est pas souvent que l'on trouve un tutoriel d'introduction sur les test unitaires et qui plus est en français.
Et celui ci particulièrement clair et les exemples bien choisi.
C'est donc pour moi une belle contribution , merci ++;
Ah j'espère qu'il y aura une suite avec autofixture par exemple
Au fait y en aura t' il une ?le 01/12/2019 à 14:30 -
OlivierSoroMembre confirmé
Merci DevEricOui je prépare une suite avec FluentAssertions, ExpectedObjects, AutoFixture, NSubstitute. Je profiterai aussi pour expliquer le pattern AAA pour prendre en compte l'ensemble des remarques que j'ai reçu. le 04/12/2019 à 2:12 -
DevEricMembre à l'essaiTrès bonne suite toujours aussi bien documenté , merci beaucouple 18/03/2020 à 16:29
-
MyPierreCandidat au ClubBonjour,
Félicitation, trop cool...
J'ai moi aussi trouvé l'article particulièrement didactique et bien documenté.
Mais maintenant que j'ai vu qu'il y aura une suite avec ExpectedObjects, AutoFixture, NSubstitute.... j'ai vraiment hâte de la découvrir.
Sait on quand elle paraîtra ?
Mercile 12/01/2020 à 18:37 -
angeovaCandidat au ClubHello Olivier,
Très bon tutoriel, nous attendons tous la suite.le 20/01/2020 à 14:23 -
OrcusZMembre habituéBonjour,
Sympas de voir un tutoriel sur les Tests Unitaires.
Malheureusement il y a beaucoup de chose à dire sur ce petit tutoriel.
1 - Pas besoin de TDD pour faire des tests Unitaires
De mon points de vue, il aurait fallu ne pas aborder TDD, mais faire une approche Test First.
TDD étant une méthode de développement, cela ne met pas en avant cette pratique.
2 - Partie TDD
- On n’explique pas les enjeux de la méthode
- les deux styles de TDD ( Classique VS Mockiste)
- On n’explique pas AAA et Red-Green-Refactor
- L'exemple est faux, la méthode aurait dû retourner 29, puis faire un nouveau test pour faire émerger l'algorithme
- Donc forcement à la fin on n’est pas expert TDD
3 - Partie MOCK
Ici l'auteur se place dans la partie Mockiste des tests.
De plus l'introduction peut amener à la réflexion qu'un test ne peux pas traversez plusieurs classes de notre application ce qui est faux. C'est même un Anti-pattern de tester chaque classe unitairement.
Un test est là pour valider un comportement et non une méthode/classe.
Pour le reste, ce sont des exemples et l'utilisation de la librairie.
Pareil les mocks sont multiples ( Stub, Mock, Fake, etc... ), d'ailleurs Mock est un abus de langage... Le faire à la main aurait permis à l'utilisateur de mieux en comprendre l'utilité.
Je sais tout de même que l'élaboration d'un tutoriel prends du temps mais c'est un sujet sur lequel il faut être précis car on entend tout et n'importe quoile 22/11/2019 à 13:48 -
OrcusZMembre habituéBonjour,
Ok pour la suite de tutoriel. Vu comme ça l'aborder est une bonne idée mais je reste persuadée que le faire en deux temps n'aurait pas posé de problème
Il faudra bien faire les liens entres les tutoriels.
Pour le point 2, je ne parle pas du red-green-refactor qui est correct (Le test échoue bien et tu as même fait un screenshot), je parle de sa résolution.
Si on veut montrer TDD dans le détail, j'aurais fait :
-> Test qui échoue
-> Un test qui s'attend à avoir 29
-> je fais retourner 29 à ma méthode
-> J'écris un nouveau test qui retourne une valeur différente
-> Je joue mes tests, oups 1 fonctionne mais pas l'autre
-> je fais l'implémentation que tu as donnée
-> je rejoue les deux tests, les deux sont verts.
Pour le point 3, je me suis peut-être mal exprimer. Je voulais dire qu'une novice en test unitaire peux le penser en lisant la phrase. Juste peut être un petit souci de tournure de phrase
En tout cas ça fait toujours plaisir de voir des articles sur les Testsle 22/11/2019 à 15:03 -
OlivierSoroMembre confirméOk c'est noté ! Il n'est pas souvent evident de définir clairement le but que tu vises à atteindre lorsque tu écris un tutoriel.
Mais je prendrai en compte tes remarques pour l'écriture de mes futurs tutoriels. le 22/11/2019 à 15:37 -
OrcusZMembre habituéJe suis totalement d'accords. Surtout quand le sujet n'est pas purement technique
.
Après il faut plus de sujet de ce genre en français et tu as bien fait de te lancer. Souvent c'est en anglais et certain terme sont difficiles à appréhender quand l'anglais n'est pas maitrisé ( merci à Google traduction ^^ ).le 22/11/2019 à 15:46