Adloun

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

Une facture qui reçoit sa remise

Injection de dépendances et configuration · niveau 1 (application)

Énoncé

Une classe FactureService calcule le montant à payer en appliquant une remise. Elle crée elle-même sa remise, private final Remise remise = new RemiseEtudiante();, où Remise est une interface à une méthode double appliquer(double montant). La réécrire pour que Spring lui injecte sa remise, puis écrire un test, sans Spring, qui vérifie le calcul avec une remise de 10 €.

Corrigé

La remise devient un paramètre du constructeur, et RemiseEtudiante un composant :


@Service
public class FactureService {

    private final Remise remise;

    public FactureService(Remise remise) {
        this.remise = remise;
    }

    public double montantAPayer(double montant) {
        return remise.appliquer(montant);
    }
}

@Component
public class RemiseEtudiante implements Remise {

    @Override
    public double appliquer(double montant) {
        return montant * 0.95;
    }
}

Pour le test, une remise s'écrit en lambda, puisque Remise n'a qu'une méthode abstraite :


class FactureServiceTest {

    @Test
    void appliqueLaRemiseQuOnLuiDonne() {
        // Une remise de test, écrite en lambda : pas besoin de Spring.
        FactureService service = new FactureService(montant -> montant - 10);
        assertThat(service.montantAPayer(50)).isEqualTo(40.0);
    }
}

Le test ne démarre pas Spring : il s'exécute en quelques millisecondes et ne dépend que de la classe testé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 →