DEV Community

Cover image for Mock Me If You Can : Guide de Survie des Tests Logiciels
Mehdi Chilla
Mehdi Chilla

Posted on • Edited on

Mock Me If You Can : Guide de Survie des Tests Logiciels

๐Ÿงช Mock Me If You Can : Guide de Survie des Tests Logiciels

Ah, les tests. Ce mot magique qui peut transformer un commit innocent en un feu d'artifice rouge dans ton pipeline CI.

Tu pensais avoir tout compris ? Dรฉtrompe-toi, camarade dรฉveloppeur chevronnรฉ.

Voici un tour d'horizon (un peu) technique, (lรฉgรจrement) sarcastique et (probablement) pertinent des principaux types de tests logiciels :

  • โœ… Tests unitaires (mockistes vs classicists)
  • ๐Ÿ”Œ Tests d'intรฉgration
  • ๐Ÿงช Tests end-to-end (E2E)
  • ๐Ÿ”ฅ Tests de charge

Test Pyramide

La fameuse pyramide des tests : moins tu montes, mieux tu dors.


๐ŸŽฌ Bonus : Notre Talk "La Lรฉgende des Gardiens du Code"

๐Ÿ—ฃ๏ธ Tu prรฉfรจres regarder plutรดt que lire ? On t'a couvert !

Le 06 juin 2024, avec mon acolyte Jeremy Bernard, on a donnรฉ un talk au DevQuest sur ce sujet brรปlant : les types de tests et la CI/CD qui va avec.

๐ŸŽฅ Le Talk en Vidรฉo

๐Ÿ“บ Regarder "La Lรฉgende des Gardiens du Code" sur YouTube

๐Ÿ“Š Les Slides de la Confรฉrence

๐Ÿ’พ Tรฉlรฉcharger le PowerPoint de la confรฉrence


Spoiler alert : On y raconte comment les tests sont les vrais gardiens de votre code... et pourquoi sans eux, c'est l'anarchie totale en production ! ๐Ÿ”ฅ


๐Ÿงฉ Tests Unitaires : Mockistes vs Classicists โ€” Le Match de Boxe

"Un bon test unitaire isole. Un test unitaire parfait n'existe pas."

โ€” Un dรฉveloppeur qui a perdu 3 jours ร  dรฉbugger un mock

๐ŸฅŠ Camp 1 : Les Mockistes (a.k.a. London School)

Tu veux tout contrรดler ? Tu adores faire semblant ? Bienvenue chez les mockistes.

Ici, chaque dรฉpendance est simulรฉe. Tu ne veux pas tester si fetchData() accรจde ร  une vraie BDD, tu veux juste qu'il croie qu'elle existe.

โœ… Avantages

  • Hyper rapide
  • Super prรฉcis : tu sais exactement ce qui est cassรฉ
  • Isolation complรจte du code testรฉ

โŒ Inconvรฉnients

  • Fragile comme un test PCR dans une boรฎte chaude
  • Teste souvent l'implรฉmentation plus que le comportement
  • Maintenance รฉlevรฉe des mocks

๐Ÿง˜โ€โ™‚๏ธ Camp 2 : Les Classicists (a.k.a. Detroit School)

Tu prรฉfรจres tester sans te casser la tรชte ร  tout mocker ? Tu es classicist.

Tu laisses les vraies dรฉpendances s'exรฉcuter dans leur contexte logique.

โœ… Avantages

  • Teste des comportements rรฉels
  • Moins de maintenance liรฉe aux mocks

โŒ Inconvรฉnients

  • Moins rapide
  • Plus sujet aux tests flakies
  • Risque de mauvaise sรฉparation des responsabilitรฉs

๐Ÿคฏ Le Vrai Dilemme ?

  • Les mockistes valident les interactions
  • Les classicists valident les rรฉsultats

๐Ÿ‘‰ Choisis ton camp, mais reste cohรฉrent.


๐Ÿ”Œ Tests d'Intรฉgration : Lร  oรน les Bugs naissent

"ร‡a marche en local, mais en prod c'est l'apocalypse ? Tu fais pas de tests d'intรฉgration, hein ?"

Le test d'intรฉgration, c'est le cafรฉ serrรฉ du TDD.

Il ne teste pas chaque grain, mais la machine complรจte.

โœ… Avantages

  • Rรฉvรจle les vrais bugs (ceux qui pรจtent en prod)
  • Valide les comportements transverses : transactions, configs, etc.

โŒ Inconvรฉnients

  • Lents, trรจs lents
  • Fragiles si dรฉpendances instables
  • Requiert souvent un environnement spรฉcifique ou des outils comme Testcontainers, WireMock, etc.

๐Ÿ”ง Schรฉma 1: Test d'Intรฉgration Multi-Couches

"Quand toutes les couches doivent jouer ensemble... sans se disputer"

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๐Ÿ–ฅ๏ธ  COUCHE UI (Frontend)                          โœ… UI rรฉpond โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  โ€ข Formulaire de commande                                   โ”‚
โ”‚  โ€ข Saisie produit: "Licorne en peluche"                    โ”‚
โ”‚  โ€ข Quantitรฉ: 42 (pourquoi pas ?)                           โ”‚
โ”‚                                                             โ”‚
โ”‚  form.submit()  // Pray it works ๐Ÿ™                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚ โฌ‡๏ธ Test vรฉrifie la transmission
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  โš™๏ธ  COUCHE API (Backend)                        โœ… API traite โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  โ€ข Endpoint REST /orders                                    โ”‚
โ”‚  โ€ข Validation des donnรฉes                                   โ”‚
โ”‚  โ€ข Calcul du prix (licornes = โ‚ฌโ‚ฌโ‚ฌ)                         โ”‚
โ”‚                                                             โ”‚
โ”‚  POST /api/orders                                           โ”‚
โ”‚  status: 201                                                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚ โฌ‡๏ธ Test vรฉrifie la persistance
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๐Ÿ—„๏ธ  COUCHE BASE DE DONNร‰ES                      โœ… DB persiste โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  โ€ข Tables: products, orders, customers                      โ”‚
โ”‚  โ€ข Transaction ACID                                         โ”‚
โ”‚  โ€ข Contraintes respectรฉes                                   โ”‚
โ”‚                                                             โ”‚
โ”‚  INSERT INTO orders  -- Magic happens here โœจ              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚ โฌ‡๏ธ Test vรฉrifie l'appel externe
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๐Ÿ’ณ SERVICES EXTERNES                        โœ… Paiement OK โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  โ€ข Service de paiement Stripe                              โ”‚
โ”‚  โ€ข Tokenisation carte                                      โ”‚
โ”‚  โ€ข Dรฉbit de 1337.42โ‚ฌ                                       โ”‚
โ”‚                                                             โ”‚
โ”‚  stripe.charge()  // ๐Ÿ’ธ Bye bye money                      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
Enter fullscreen mode Exit fullscreen mode

๐ŸŽ‰ Rรฉsultat du Test d'Intรฉgration

โœ“ Formulaire โ†’ API : PASS
โœ“ API โ†’ Base de donnรฉes : PASS  
โœ“ API โ†’ Service paiement : PASS
โœ“ Cohรฉrence des donnรฉes : PASS

๐Ÿค“ "Un test d'intรฉgration, c'est comme un chef d'orchestre :
   il faut que tous les musiciens jouent la mรชme partition...
   sinon รงa donne du jazz expรฉrimental !"
Enter fullscreen mode Exit fullscreen mode

๐Ÿงช Tests End-to-End (E2E) : Le Grand Frisson de l'Automatisation

"Si le bouton ne clique pas, le client ne paie pas."

Les tests E2E sont lร  pour simuler un vrai utilisateur.

Tu veux tester tout le flow : login, achat, logout ? C'est ici.

๐Ÿ› ๏ธ Outils populaires :

โœ… Avantages

  • Simule le parcours utilisateur complet
  • Dรฉtecte les rรฉgressions UI ou frontend/backend

โŒ Inconvรฉnients

  • Lents. Trรจs lents.
  • Fragiles. Trรจs fragiles.
  • Maintenance รฉlevรฉe (un QA engineer peut y passer sa vie)

๐Ÿค– Schรฉma 2: E2E Testing vs Human Testing

"Mรชme parcours, mรชme vรฉrifications, mais qui gagne ?"

L'Affrontement ร‰pique

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โš”๏ธ VS โš”๏ธ    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚     ๐Ÿ‘จโ€๐Ÿ’ป L'HUMAIN TESTEUR      โ”‚                โ”‚       ๐Ÿค– LE TEST E2E        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค                โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                             โ”‚                โ”‚                             โ”‚
โ”‚         ๐Ÿง‘โ€๐Ÿ’ผ                  โ”‚                โ”‚            ๐Ÿค–               โ”‚
โ”‚                             โ”‚                โ”‚                             โ”‚
โ”‚ ๐Ÿ’ญ "Bon, on va tester       โ”‚                โ”‚ ๐Ÿ’ญ "BEEP BOOP. Exรฉcution   โ”‚
โ”‚     cette app... encore...   โ”‚                โ”‚     du scรฉnario 1337..."    โ”‚
โ”‚     pour la 47รจme fois..."   โ”‚                โ”‚                             โ”‚
โ”‚                             โ”‚                โ”‚                             โ”‚
โ”‚ ACTIONS:                    โ”‚                โ”‚ CODE:                       โ”‚
โ”‚                             โ”‚                โ”‚                             โ”‚
โ”‚ 1. ๐Ÿ–ฑ๏ธ Ouvre le navigateur    โ”‚                โ”‚ cy.visit('localhost:3000')  โ”‚
โ”‚    *soupir* Firefox ou      โ”‚                โ”‚                             โ”‚
โ”‚    Chrome aujourd'hui ?     โ”‚                โ”‚ cy.get('[data-testid=form]')โ”‚
โ”‚                             โ”‚                โ”‚   .should('be.visible')     โ”‚
โ”‚ 2. โŒจ๏ธ Tape l'URL             โ”‚                โ”‚                             โ”‚
โ”‚    localhost:3000... enfin  โ”‚                โ”‚ cy.get('#email')            โ”‚
โ”‚    j'espรจre que c'est รงa    โ”‚                โ”‚   .type('test@example.com') โ”‚
โ”‚                             โ”‚                โ”‚                             โ”‚
โ”‚ 3. โณ Attend le chargement   โ”‚                โ”‚ cy.get('button[type=submit]')โ”‚
โ”‚    Hmm... c'est long lร ...  โ”‚                โ”‚   .click()                  โ”‚
โ”‚    รงa marche ?              โ”‚                โ”‚                             โ”‚
โ”‚                             โ”‚                โ”‚ cy.contains('Success!')     โ”‚
โ”‚ 4. ๐Ÿ‘€ Regarde l'interface   โ”‚                โ”‚   .should('be.visible')     โ”‚
โ”‚    "Tiens, ce bouton a      โ”‚                โ”‚                             โ”‚
โ”‚    bougรฉ de 2px..."         โ”‚                โ”‚                             โ”‚
โ”‚                             โ”‚                โ”‚ โšก Temps d'exรฉcution: 0.3s  โ”‚
โ”‚ 5. ๐Ÿ“ Remplit le formulaire โ”‚                โ”‚ ๐ŸŽฏ Prรฉcision: 100%         โ”‚
โ”‚    Email: test@test.com     โ”‚                โ”‚ ๐Ÿ”„ Rรฉpรฉtable: โˆž fois       โ”‚
โ”‚    (encore et toujours)     โ”‚                โ”‚ ๐Ÿ“Š Rapports: Automatiques  โ”‚
โ”‚                             โ”‚                โ”‚                             โ”‚
โ”‚ 6. ๐Ÿ“ค Clique sur Submit     โ”‚                โ”‚                             โ”‚
โ”‚    *croise les doigts*      โ”‚                โ”‚ ๐Ÿ’ญ "BEEP BOOP. Test terminรฉโ”‚
โ”‚                             โ”‚                โ”‚     Prรชt pour les 999       โ”‚
โ”‚ 7. โœ… Vรฉrifie le rรฉsultat   โ”‚                โ”‚     autres scรฉnarios..."    โ”‚
โ”‚    "Success!" - Ouf, รงa     โ”‚                โ”‚                             โ”‚
โ”‚    marche... cette fois     โ”‚                โ”‚                             โ”‚
โ”‚                             โ”‚                โ”‚                             โ”‚
โ”‚ ๐Ÿ’ญ "Bon, maintenant il faut โ”‚                โ”‚                             โ”‚
โ”‚     que je teste avec un    โ”‚                โ”‚                             โ”‚
โ”‚     autre email... et sur   โ”‚                โ”‚                             โ”‚
โ”‚     mobile... et Safari๐Ÿ˜ต"  โ”‚                โ”‚                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
Enter fullscreen mode Exit fullscreen mode

๐Ÿ† Verdict du Match

Critรจre ๐Ÿ‘จโ€๐Ÿ’ป Humain ๐Ÿค– Robot Gagnant
Vitesse 3 minutes 0.3 secondes ๐Ÿค– >>> ๐Ÿ‘จโ€๐Ÿ’ป
Prรฉcision "Oups, cliquรฉ ร  cรดtรฉ" Chirurgicale ๐Ÿค– > ๐Ÿ‘จโ€๐Ÿ’ป
Rรฉpรฉtabilitรฉ "Pas un lundi matin..." 24h/24, 7j/7 ๐Ÿค– >>> ๐Ÿ‘จโ€๐Ÿ’ป
Crรฉativitรฉ "Et si je clique lร  ?" Suit le script ๐Ÿ‘จโ€๐Ÿ’ป >>> ๐Ÿค–
Dรฉtection de bugs bizarres "En diagonale รงa plante" Ne sort jamais du script ๐Ÿ‘จโ€๐Ÿ’ป >>> ๐Ÿค–

๐Ÿค La Vรฉritรฉ

L'E2E teste comme un humain trรจs disciplinรฉ qui n'aurait jamais de lundi matin...

Mais qui ne trouvera jamais le bug bizarre qui arrive seulement "quand on fait รงa en diagonale" ๐Ÿคทโ€โ™‚๏ธ


๐Ÿ”ฅ Tests de Charge : T'as Pas Crashรฉ, Donc T'as Gagnรฉ

"Tu peux scaler ton app ร  1 million d'utilisateurs ? Moi non plus. Mais j'ai un test qui dit que peut-รชtre."

Tu veux savoir ce que devient ton API sous pression ? Tu fais des tests de charge.

๐Ÿ› ๏ธ Outil testรฉ:

โœ… Avantages

  • Identifie les goulets d'รฉtranglement
  • Fournit des metrics (latence, taux d'erreur, throughput)
  • Essentiel en prรฉprod sur les services critiques

โŒ Inconvรฉnients

  • Difficiles ร  calibrer et interprรฉter
  • Peuvent donner un faux sentiment de sรฉcuritรฉ
  • Nรฉcessitent une vraie stratรฉgie d'analyse

โš–๏ธ Rรฉsumรฉ Comparatif

Type de test Vitesse ๐Ÿš€ Fiabilitรฉ ๐Ÿ›ก๏ธ Portรฉe ๐ŸŽฏ Complexitรฉ ๐Ÿง 
Unitaire (mock) Ultra rapide Moyenne Petite Moyenne
Unitaire (classic) Rapide Bonne Moyenne Basse ร  moyenne
Intรฉgration Moyenne Moyenne Moyenne ร  large Moyenne ร  haute
End-to-End (E2E) Lente Moyenne Large Haute
Charge Variable Bonne (si bien fait) Large Haute

๐Ÿ‘‹ Conclusion : Teste intelligemment, pas aveuglรฉment

Les tests ne sont pas lร  pour faire joli sur un dashboard.

Ils sont lร  pour te sauver le c*l ร  2h du matin quand la prod tombe.

โœ… Reste pragmatique

โœ… N'overengineere pas tes tests

โœ… Utilise le bon test pour le bon usage

Et surtout :

Si tu commites sans tests, assume quand tout pรจte. ๐Ÿ˜ˆ


๐Ÿ“Œ Tu veux plus d'articles techniques ?

Suis-moi ici sur dev.to, ou viens troller (gentiment) en commentaires.


#DevOps #TDD #Testing #SoftwareCraftsmanship #TestezVosProds

Top comments (0)