Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Community Manager

    Apprendre à faire des tests unitaires en .Net Core avec XUNIT
    Chers membres du club,

    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).
    Bonne lecture

    Retrouvez les meilleurs cours et tutoriels pour apprendre la programmation DotNET.
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  2. #2
    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

  3. #3
    Membre averti
    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.

  4. #4
    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

  5. #5
    Membre averti
    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 .

  6. #6
    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 ^^ ).

  7. #7
    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 ?

  8. #8
    Membre averti
    Citation Envoyé par DevEric Voir le message
    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.

  9. #9
    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

  10. #10
    Candidat au Club
    Hello Olivier,
    Très bon tutoriel, nous attendons tous la suite.

  11. #11
    Candidat au Club
    J'ai aussi beaucoup aimé ce tutoriel et en si peu de pages il couvre déjà bien le sujet comme par exemple le mock du fichier.
    Pour moi, les exemples sont bien expliqués et l'approche est claire .
    Alors je ne peux que rejoindre les autres avec la même question ... y aura t'il bien une suite ?

  12. #12
    Membre averti
    Partie2 : AutoFixture
    Ce message n'a pas pu être affiché car il comporte des erreurs.

  13. #13
    Membre à l'essai
    Très bonne suite toujours aussi bien documenté , merci beaucoup