Developpez.com - Rubrique .NET

Le Club des Développeurs et IT Pro

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 :

Apprendre à faire des tests unitaires en .Net Core avec XUNIT
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).
Bonne lecture

Retrouvez les meilleurs cours et tutoriels pour apprendre la programmation DotNET.
  Discussion forum
12 commentaires
  • OlivierSoro
    Membre 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.
  • DevEric
    Membre à l'essai
    C'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 ?
  • OlivierSoro
    Membre confirmé
    Envoyé par DevEric
    C'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 ?

    Merci DevEric Oui 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.
  • DevEric
    Membre à l'essai
    Très bonne suite toujours aussi bien documenté , merci beaucoup
  • MyPierre
    Candidat au Club
    Bonjour,
    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 ?

    Merci
  • angeova
    Candidat au Club
    Hello Olivier,
    Très bon tutoriel, nous attendons tous la suite.
  • OrcusZ
    Membre 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 quoi
  • OrcusZ
    Membre 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 Tests
  • OlivierSoro
    Membre 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 .
  • OrcusZ
    Membre 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 ^^ ).