Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 7 · Exercice de TD
De bout en bout
Tester l'application · niveau 2
Énoncé
Écrire un test d'intégration qui passe une commande de deux Petit Prince livrés sur le campus, vérifie le total renvoyé, puis le stock du livre lu par l'API. Pourquoi ce test peut-il être @Transactional ?
Corrigé
@SpringBootTest
@AutoConfigureMockMvc
@Transactional
class IntegrationTest {
@Autowired
MockMvcTester mvc;
@Test
void uneCommandeLivreeSurLeCampus() {
assertThat(mvc.post().uri("/api/commandes")
.contentType(MediaType.APPLICATION_JSON).content("""
{ "lignes": [ { "isbn": "9782956300052", "quantite": 2 } ],
"nom": "Ada Lovelace", "courriel": "ada@example.org", "retrait": "campus" }
"""))
.hasStatus(201)
.bodyJson().extractingPath("$.total").isEqualTo(19.0);
assertThat(mvc.get().uri("/api/livres/9782956300052"))
.bodyJson().extractingPath("$.stock").isEqualTo(23);
}
}
Il peut être transactionnel parce qu'il ne vérifie qu'un scénario qui réussit : l'annulation de fin de test ne fausse rien, et efface la commande. JSON ne distingue pas 19.00 de 19.0 : l'assertion compare des nombres.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.