Aller au contenu principal

Tests unitaires / E2E

Tests E2E

  • Plus résilient de passer par un attribut data- (ex: data-test) que par des classes css ou des éléments html

Test unitaire

  • = un test isolé des autres tests et des dépendances "dures à tester" (pas de base de données, d'utilisation du système de fichiers, du réseau, etc)
  • Ajouter une classe n'est pas un déclencheur d'écriture de test. Le déclencheur = implémenter un nouveau comportement
  • Eliminer la dépendance entre tests et code : le test doit tester l'API / le contrat, pas les détails de l'implémentation !!
    • Ne pas tester le code "interne"
    • Ne pas tout rendre "public" pour pouvoir le tester
    • Garder une API publique légère

Nommage du test

  • L'idéal = un nom qui reprend la règle de gestion testée (exemple Divide_should_raise_an_error_when_denominator_is_zero)
  • On peut s'inspirer des patterns de nommage inspiré du BDD : should/when et given/when/then

Corps du test

  • Généralement divisé en 3 sections (qu'on peut retrouver sous le nom Arrange/Act/Assert) :
    • Initialisation des données (Arrange)
    • Appel de la fonctionnalité à tester (Act)
    • Vérification du résultat (Assert)

TDD

Workflow :

  • Red => écrire un test qui ne passe pas
  • Green => faire en sorte que le test passe rapidement, même si le code est moche
  • Refactor => refactorer le code (appliquer des patterns, enlever les duplicata, les code smells, etc). A ce moment là on n'écrit pas de nouveaux tests unitaires ! (car si on en ajoute ils seront couplés à l'implémentation)
  • Un test qui passe = un commit

Deux niveaux de TDD :

  • ATDD (Acceptance TDD)
  • Developer TDD

Sources

  • TDD, where did it all go wrong
  • Livre Software Craft de Cyrille Martraire
  • A lire :
    • Test-Driven Development by Example de Kent Beck
    • Refactoring to Patterns de Joshua Kerievsky