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