# Tests avec Spring boot
---
## Au programme
- Essayer de trouver la raison d'une erreur
- Mieux loguer les erreurs
- Ajouter des tests
- Ajouter d'autres tests
- Et enfin rajouter des tests
---
## Une application inutile ...
- Avec des dépendances spring boot quand même
---
## Et qui ne fonctionne pas !
---
## Trouver le bogue
- Que dit la log ?
- Et en local
- **déclenchement du pas à pas du débogueur sur exception**
---
## Améliorer la journalisation des erreurs
Une exception correspond à un cas d'exécution "anormal" et sert à le signaler à la bonne personne :
- les exceptions métier peuvent remonter à l'utilisateur pour indiquer une mauvaise saisie
- les exceptions techniques doivent être loguées (une seule fois) avec la stack trace + message générique à l'utilisateur :
- elles sont non contrôlées (encapsuler dans une exceptions technique non contrôlée)
- [Spring logue l'erreur pour vous et propose un message générique](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-web-applications.spring-mvc.error-handling)
---
## Il y en a assez des AC !
- Rendre le code résilient : votre application doit répondre même si le WS gestion des contacts est HS
- NB : c'est une règle métier en soi
- Quel(s) tests pour reproduire les comportements du WS gestion des contacts :
- Mocker le serveur avec [@RestClientTest](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing.spring-boot-applications.autoconfigured-rest-client)
- Mocker le `restTemplate` pour simuler les pb de certificat avec [@MockBean](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing.spring-boot-applications.mocking-beans)
- Lors du refactor, utiliser les structures du langage pour signifier l'absence de contact
---
## JUnit le mal nommé
Sert à faire en java des tests :
- unitaires
- mais aussi des tests d'intégration
- des tests fonctionnels
---
## Compléter les tests autour de `ContactService`
- Tester les cas nominaux et les cas d'exception
- une méthode pour chaque cas de test
---
## Des vrais tests unitaires : `TrustService`
Toujours avec @MockBean : vérifier que le calcul du bouléen "trust" est correct selon les différents
---
## Il faudrait aussi tester la logique dans `Contact`
---
## Modifier les props pour les tests
- Par exemple pour ne plus alimenter le fichier de logs : modifier la property `logging.file.path`
- [Plusieurs méthodes](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config)
---
## Tester ses endpoints
- Test d'intégration ou fonctionnel
- on peut quand même mocker les appels aux services externes
---
## Sitographie
{"metaMigratedAt":"2023-06-16T14:51:49.258Z","metaMigratedFrom":"Content","title":"Tests avec Spring boot","breaks":true,"contributors":"[{\"id\":\"97bffc1a-181f-4ccb-956c-fb0fdc5fa2b9\",\"add\":2777,\"del\":0}]"}