Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →