Maintenant que vous avez une meilleure idée de ce que sont les tests en général et les tests unitaires en particulier, nous allons pouvoir aborder l'épineuse question de ce cours :
Pourquoi rédiger des tests unitaires ?
Il y a de nombreuses raisons à cela. Et voici les 5 principales !
1. Prouver que votre code fonctionne ✅
Tout le code que vos tests unitaires couvrent fonctionne par définition des tests unitaires. Donc vos tests vous donnent la preuve que votre code marche. Et cela vous donne un atout exceptionnel, vous avez confiance dans votre code !
Si vous vous êtes déjà frottés à une grosse base de code, vous avez sans doute ressenti ce vertige d'avoir peur de tout casser, car vous ne pouviez pas anticiper les implications de vos changements.
Avec des tests unitaires, si un changement casse quelque chose, vous le verrez tout de suite, car un ou plusieurs de vos tests vont passer au rouge !
2. Prévenir les bugs et régressions 🐞
Comme les tests unitaires prouvent que votre code fonctionne, ils empêchent les bugs de se produire. Et comme tout est testé, vous pouvez modifier votre base de code sans craindre une régression, les tests la verront tout de suite !
Et vous pourrez faire les changements nécessaires avant d'envoyer votre nouvelle version de l'app sur l'App Store !
3. Penser vos classes 🤔
Comme nous l'avons vu, les tests unitaires ont lieu à l'interface des classes. Donc pour pouvoir tester facilement, il va falloir que vous pensiez vos classes correctement.
Écrire vos tests vous incite à créer des classes dont les responsiblités sont uniques et indépendantes.
En somme, les tests vous facilitent l'organisation de votre code.
4. Une documentation vivante de votre code 📚
Chaque test va couvrir un cas d'usage d'une de vos classes. Donc si tout votre code est testé, vos tests sont une vraie documentation fonctionnelle de votre programme. On peut y trouver tout ce que fait le code !
Regardez le code condensé de la classe Game
que nous venons de tester :
func testGivenScoreIsNull_WhenIncrementingPlayer1Score_ThenScoreShouldBeFifteen() {}
func testGivenScoreIsFifteen_WhenIncrementingPlayer1Score_ThenScoreShouldBeThirty() {}
func testGivenScoreIsThirty_WhenIncrementingPlayer1Score_ThenScoreShouldBeForty() {}
func testGivenScoreIsForty_WhenIncrementingPlayer1Score_ThenGameIsOverAndWonByPlayer1() {}
On peut très bien lire les 4 cas d'utilisations de la classe Game
grâce à notre nomenclature en Behavior Driven Development.
En plus, contrairement à une documentation classique rédigée en dehors du code, celle-ci a l'avantage d'être toujours à jour ! En effet, dès que vous modifiez votre code, vous devez modifier vos tests.
Une bonne suite de tests, c'est donc la meilleure documentation qui soit !
5. Être professionnel 💼
Enfin, lorsque vous faites des tests, vous créez un code qui est facile à maintenir, qui prévient les bugs et dont vous êtes certain qu'il fonctionne. Et ce sont les composants essentiels d'une attitude professionnelle.
Si un plombier vient chez vous réparer une fuite et qu'il vous dit en partant que sa réparation va peut-être arrêter la fuite, vous vous dites que c'est un touriste ! Et bien, en développement c'est pareil, il faut que vous soyez sûr de vous et seule une bonne suite de tests vous le permettra !
Alors, faites de beaux tests ! Vous ne voulez pas passer pour des touristes :) !
En résumé
Rédiger des tests unitaires doit devenir un réflexe, car c'est une étape incontournable si vous souhaitez devenir des développeurs iOS professionnels ! En effet, les tests unitaires vous permettent de :
Prouver que votre code fonctionne
Prévenir les bugs et les régressions
Penser à vos classes
Créer une documentation vivante de votre code
Être professionnel
Dans le prochain chapitre, nous allons améliorer la couverture en tests de notre code !