Noname1.java *
Transcription
Noname1.java *
/** * Banque - correction. * * @author Peter DAEHNE * @version 2.0 */ import java.util.*; public class Banque { private String raisonSociale; public void setRaisonSociale (String raisonSoc) {raisonSociale = raisonSoc;} public String getRaisonSociale () {return raisonSociale;} private HashSet clients = new HashSet(); /* Les clients de la banque */ public HashSet getClients () {return clients;} public void addClient (Personne client) {clients.add(client);} public void removeClient (Personne client) {clients.remove(client);} public Banque (String raisonSoc) {setRaisonSociale(raisonSoc);} } // Banque /** * Personne - correction. * * @author Peter DAEHNE * @version 2.0 */ public class Personne { private String nom; public void setNom (String nom) {this.nom = nom;} public String getNom () {return nom;} public Personne (String nom) {setNom(nom);} } // Personne /** * Compte - correction. * * @author Peter DAEHNE * @version 2.0 */ import java.util.*; public class Compte { private int solde; private Personne titulaire; public Personne getTitulaire () {return titulaire;} private Banque banque; public Compte (Banque banque, Personne titulaire) { this.banque = banque; this.titulaire = titulaire; assert invTitulaire() : "Le titulaire du compte doit être un client de la banque (inv)"; /* Invariant */ solde = 0; } // Constructeur public int getSolde () {return solde;} public void créditer (int somme) { assert (somme > 0) : "La somme à créditer doit être positive (pre)"; /* Précondition */ int oldSolde = solde; /* Enregistrement de la valeur précédente (postcondition) */ solde += somme; assert (solde == oldSolde + somme) : "Le solde résultant du crédit est incorrect (post)"; /* Postondition */ assert invSolde() : "Le solde doit être positif (inv)"; /* Invariant */ } // créditer public void débiter (int somme) { assert (somme > 0) : "La somme à débiter doit être positive (pre)"; /* Précondition */ int oldSolde = solde; /* Enregistrement de la valeur précédente (postcondition) */ solde -= somme; assert (solde == oldSolde - somme) : "Le solde résultant du débit est incorrect (post)"; /* Postondition */ assert invSolde() : "Le solde doit être positif (inv)"; /* Invariant */ } // débiter /* Invariants */ public boolean invSolde () {return solde >= 0;} public boolean invTitulaire () {return banque.getClients().contains(titulaire);} } // Compte /** * Compte bancaire - Tests unitaires: tests des contraintes. * * Vérification que les AssertionError attendues aient bien lieu * * @author Peter DAEHNE / HEG-Genève * @version 3.2 */ import junit.framework.*; public class TestsCon extends TestCase { /* Données de test: une Banque et une liste de Clients. */ private Personne[] clients; private Banque banque; /* Fixture: création des données de test */ protected void setUp () { clients = new Personne[] { new Personne("Daehne"), new Personne("Trabichet"), new Personne("Dugerdil"), new Personne("Burdet"), new Personne("Brentini"), new Personne("Quinlan"), new Personne("Vigano"), new Personne("Hauri") }; banque = new Banque("HEG Holding SA"); for (int k = 0; k < clients.length; k++) banque.addClient(clients[k]); } // setUp /* Violation de l'invariant: le titulaire doit être client de la banque */ public void testInvTitulaire () { try { Compte compte = new Compte(banque, new Personne("Zorglub")); } catch (AssertionError e) {return;} fail("On peut créer un compte avec un titulaire qui n'est pas client (inv)" ); } // testInvTitulaire /* Violation de l'invariant: le solde doit être positif */ public void testInvSolde () { Compte compte = new Compte(banque, clients[1]); compte.créditer(1000); try { compte.débiter(1001); } catch (AssertionError e) {return;} fail("Le solde peut être négatif (inv)"); } // testInvSolde /* Violation de la précondition: la somme à créditer doit être positive */ public void testPreCréditer () { Compte compte = new Compte(banque, clients[2]); try { compte.créditer(-1000); } catch (AssertionError e) {return;} fail("On peut créditer une somme négative (pre)"); } // testPreCréditer /* Violation de la précondition: la somme à débiter doit être positive */ public void testPreDébiter () { Compte compte = new Compte(banque, clients[3]); compte.créditer(1000); try { compte.débiter(-500); } catch (AssertionError e) {return;} fail("On peut débiter une somme négative (pre)"); } // testPreDébiter public static void main (String[] args) { junit.textui.TestRunner.run(new TestSuite(TestsCon.class)); } // main } // TestsCon /** * Compte bancaire - Tests unitaires: tests de la fonctionnalité * * Emploi des fonctionnalités de junit.framework * * @author Peter DAEHNE / HEG-Genève * @version 3.1 */ import junit.framework.*; public class TestsFonct extends TestCase { /* Données de test: une Banque et une liste de Clients. */ private Personne[] clients; private Banque banque; /* Fixture: création des données de test */ protected void setUp () { clients = new Personne[] { new Personne("Daehne"), new Personne("Trabichet"), new Personne("Dugerdil"), new Personne("Burdet"), new Personne("Brentini"), new Personne("Quinlan"), new Personne("Vigano"), new Personne("Hauri") }; banque = new Banque("HEG Holding SA"); for (int k = 0; k < clients.length; k++) banque.addClient(clients[k]); } // setUp /* Test de créditer() */ public void testCréditer () { Compte compte = new Compte(banque, clients[0]); compte.créditer(1000); assertEquals("créditer(): le solde est incorrect", 1000, compte.getSolde()); } // testCréditer /* Test de débiter() */ public void testDébiter () { Compte compte = new Compte(banque, clients[0]); compte.créditer(1000); compte.débiter(500); assertEquals("débiter(): le solde est incorrect", 500, compte.getSolde()); } // testDébiter public static void main (String[] args) { junit.textui.TestRunner.run(new TestSuite(TestsFonct.class)); } // main } // TestsFonct