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
- 10 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.