Slide 1

Slide 1 text

Icons made by Icongeek26, Freepik from www.flaticon.com

Slide 2

Slide 2 text

Tests de verrouillage vs. TDD Icons made by Roundicons from www.flaticon.com

Slide 3

Slide 3 text

Icons made by Freepik from www.flaticon.com https://github.com/JMLamodiere/tdd-demo-forumphp2020

Slide 4

Slide 4 text

Previously...

Slide 5

Slide 5 text

● Un Test Fonctionnel décrit un fonctionnement ● Un Test Unitaire verrouille une implémentation Idée reçue #1 Icons made by Freepik from www.flaticon.com

Slide 6

Slide 6 text

● Un Test Fonctionnel décrit un fonctionnement ● Un Test Unitaire verrouille une implémentation Idée reçue #1 Icons made by Roundicons from www.flaticon.com Tous les tests décrivent le fonctionnement attendu des méthodes / API publiques Seules l’audience et la taille de la zone couverte varient.

Slide 7

Slide 7 text

Seuls les tests fonctionnels ont 3 étapes : ● Given ● When ● Then Idée reçue #2 Icons made by Freepik from www.flaticon.com

Slide 8

Slide 8 text

Seuls les tests fonctionnels ont 3 étapes : ● Given ● When ● Then Idée reçue #2 Icons made by Roundicons from www.flaticon.com Tous les tests suivent le schéma narratif : ● Given = Arrange ● When = Act ● Then = Assert Situation initiale Elément déclencheur Situation finale

Slide 9

Slide 9 text

Idée reçue #3 Icons made by Freepik from www.flaticon.com Vérifier le nombre d’appels à toutes les méthodes mockées augmente ma confiance. ->expects($this->exactly(1))->method('xxx') ->shouldBeCalledTimes(1)

Slide 10

Slide 10 text

Idée reçue #3 Vérifier le nombre d’appels à toutes les méthodes mockées augmente ma confiance. ->expects($this->exactly(1))->method('xxx') ->shouldBeCalledTimes(1) Icons made by Roundicons, Smashicons from www.flaticon.com ● Brouille l’intention du test ● Verrouille des détails d'implémentation ● Impossible à écrire en premier

Slide 11

Slide 11 text

Quoi tester ?

Slide 12

Slide 12 text

Idée reçue #4 Icons made by Freepik from www.flaticon.com Je peux mocker les librairies utilisées côté Infrastructure : ● Http : Guzzle… ● Base de donnée : Doctrine, Eloquent…

Slide 13

Slide 13 text

Idée reçue #4 Icons made by Roundicons, Smashicons from www.flaticon.com Je peux mocker les librairies utilisées côté Infrastructure : ● Http : Guzzle… ● Base de donnée : Doctrine, Eloquent… ● Couplé aux détails d’utilisation de la lib ● Suppositions sur son fonctionnement ● Impossible à écrire en premier

Slide 14

Slide 14 text

Infrastructure : test d’intégration Icons made by Freepik, Smashicons, Roundicons from www.flaticon.com

Slide 15

Slide 15 text

Idée reçue #5 Icons made by Freepik from www.flaticon.com Test fonctionnel = forcément end to end

Slide 16

Slide 16 text

Idée reçue #5 Icons made by Roundicons, smashicons from www.flaticon.com Test fonctionnel = forcément end to end ● Lent ● Fragile ● Difficile à maintenir ● Plus dur à écrire en premier ● Verrouille trop tôt les choix d’infrastructure Suggestion : mocker Ports Secondaires

Slide 17

Slide 17 text

Icons made by Freepik from www.flaticon.com Suggestion

Slide 18

Slide 18 text

Je dois connaître le découpage de mes classes pour écrire mes tests Idée reçue #6 Icons made by Freepik from www.flaticon.com

Slide 19

Slide 19 text

Je dois connaître le découpage de mes classes pour écrire mes tests Idée reçue #6 Icons made by Roundicons from www.flaticon.com ● Découpage classes de prod != classes de test ● Démarrer par une zone au contour certain

Slide 20

Slide 20 text

Icons made by Freepik from www.flaticon.com 1er test: zone au contour certain

Slide 21

Slide 21 text

Idée reçue #7 Icons made by Freepik from www.flaticon.com Si je ne mock pas mes Entités / DTO, trop de tests casseront si j’ajoute un champ

Slide 22

Slide 22 text

Idée reçue #7 Icons made by Roundicons from www.flaticon.com Si je ne mock pas mes Entités / DTO, trop de tests casseront si j’ajoute un champ ● Factori(es) de test avec champs facultatifs ● Getter pas couvert ? Je le supprime

Slide 23

Slide 23 text

Merci Icons made by Roundicons, Freepik from www.flaticon.com A vous de jouer ! ● ●