Adloun

Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 7 · Application directe du cours

Une doublure pour le stock

Tester l'application · niveau 2

Énoncé

Avec des doublures Mockito, vérifier qu'une commande de 4 exemplaires d'un livre qui en a 3 est refusée avec le bon message, que le stock du livre est inchangé, et que la commande n'est jamais enregistrée.

Corrigé


@ExtendWith(MockitoExtension.class)
class ServiceMockitoTest {

    @Mock
    LivreDepot livres;

    @Mock
    CommandeDepot commandes;

    @Test
    void unStockInsuffisantNeTouchePasAuStock() {
        Livre algo = new Livre("9782956300021", "Introduction à l’algorithmique", "T. Cormen et al.",
                "Informatique", new BigDecimal("89.00"), null, true, 3);
        when(livres.findById("9782956300021")).thenReturn(Optional.of(algo));
        var service = new CommandeService(livres, commandes,
                new LibrairieProperties("La Librairie du Campus", new BigDecimal("2.00")));

        assertThatThrownBy(() -> service.commander(new CommandeDemande(
                List.of(new LigneDemande("9782956300021", 4)), "Ada", "ada@example.org", "boutique")))
                .isInstanceOf(CommandeInvalideException.class)
                .hasMessage("Stock insuffisant pour « Introduction à l’algorithmique » (3 en stock).");
        assertThat(algo.getStock()).isEqualTo(3);
        verify(commandes, never()).save(any());
    }
}

La doublure de CommandeDepot n'a besoin d'aucune réponse : on vérifie seulement qu'elle n'a jamais été appelée.

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 →