Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 2 Het idee Schrijf uw tests vooraf Voordelen van vooraf en geautomatiseerd testen: De vereisten voor de code zijn duidelijk gespecifieerd: zie testklasse Testen of aan de vereisten voldaan is, is gemakkelijk: Run de testklasse Het eventueel nadelig effect van aanpassingen op de code is onmiddelijk verifieerbaar.
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 3 Bestandsorganisatie Directorystructuur met bestanden: c:\ javaoef test Test.java (dient als superclass voor eigen testklase) factuurapp FactuurAppTest.java (eigen testklasse) Factuur.java (straks)
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 4 Klassenmodel op specificatie/ontwerp- niveau
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 5 Integratie met de testomgeving Merk op: FactuurAppTest zit zelf in het pakket van de klasse die het test. Om te testen hoe het is om client te zijn buiten het pakket, moet de FactuurAppTest erbuiten geplaatst worden
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 6 FactuurAppTest.java package factuurApp; import test.Test; import java.util.Date; // we gaan straks Date gebruiken public class FactuurAppTest extends Test{ public static void main(String[] args){ public static void main(String[] args){ (new FactuurAppTest()).run(); (new FactuurAppTest()).run(); } protected void compareAll(){ protected void compareAll(){ // Tests go here // Tests go here } }
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 7 We schrijven de tests eerst // In plaats van Tests go here schrijven we: // Creatie factuurobject fac1 Factuur fac1; Factuur fac1; fac1 = new Factuur("Jef","Peters", fac1 = new Factuur("Jef","Peters", "BE ", new Date()); "BE ", new Date()); fac1.voegLijnToe("Rode Verf",50.0,3); fac1.voegLijnToe("Rode Verf",50.0,3); fac1.voegLijnToe("Blauwe Verf",45.0,2); fac1.voegLijnToe("Blauwe Verf",45.0,2); fac1.voegLijnToe("Borstel Medium",79.95,5); fac1.voegLijnToe("Borstel Medium",79.95,5); // Creatie factuurobject fac2 // Creatie factuurobject fac2 // analoog // analoog // test fac1: compareAndReport is geërfd van Test: // test fac1: compareAndReport is geërfd van Test: compareAndReport("fac1", compareAndReport("fac1", fac1.getTotPrijs()+"", “639.75" ); fac1.getTotPrijs()+"", “639.75" ); // test fac2: // test fac2: compareAndReport("fac2", compareAndReport("fac2", fac2.getTotPrijs()+"", “586.0" ); fac2.getTotPrijs()+"", “586.0" );
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 8 Factuur.java Bevat juist genoeg om te compileren. Alle tests falen uiteraard: package factuurApp; import java.util.ArrayList; import java.util.Date; public class Factuur{ public Factuur (String naam, public Factuur (String naam, String voornaam, String voornaam, String BTW, String BTW, Date datum){ Date datum){ } public void voegLijnToe(String omschr, public void voegLijnToe(String omschr, double prijs, double prijs, int aantal){ int aantal){ } public float getTotPrijs(){return 0;}; public float getTotPrijs(){return 0;};}
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 9 Compilatie C:\javaoef>javac factuurApp\FactuurAppTest.java De andere klassen worden mee gecompileerd want factuurAppTest gebruikt ze.
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 10 De test wordt uitgevoerd C:\javaoef>java factuurApp.FactuurAppTest FOUT! fac1 | berekend=0.0, verwacht= FOUT! fac2 | berekend=0.0, verwacht=586 Totaal aantal fouten (fouten/tests): 2/2
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 11 Code aanvullen: Factuur.java public class Factuur{ public Factuur (String naam, public Factuur (String naam, String voornaam, String voornaam, String BTW, String BTW, Date datum){ Date datum){ } private ArrayList lijnen = new ArrayList(); private ArrayList lijnen = new ArrayList(); public void voegLijnToe(String omschr, public void voegLijnToe(String omschr, double prijs, double prijs, int aantal){ int aantal){ FactuurLijn lijn = new FactuurLijn(omschr,prijs,aantal); FactuurLijn lijn = new FactuurLijn(omschr,prijs,aantal); lijnen.add(lijn); lijnen.add(lijn); } public double getTotPrijs(){ public double getTotPrijs(){ double totPrijs = 0.0; double totPrijs = 0.0; for (int i=0; i < lijnen.size(); i++){ for (int i=0; i < lijnen.size(); i++){ FactuurLijn lijn; FactuurLijn lijn; lijn = (FactuurLijn) lijnen.get(i); lijn = (FactuurLijn) lijnen.get(i); totPrijs = totPrijs + lijn.getFactuurLijnPrijs(); totPrijs = totPrijs + lijn.getFactuurLijnPrijs(); } return totPrijs; return totPrijs; }}
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 12 Code aanvullen: FactuurLijn.java package factuurApp; public class FactuurLijn{ public FactuurLijn(String omschr,double prijs, int aantal){ public FactuurLijn(String omschr,double prijs, int aantal){ this.prijs = prijs; this.prijs = prijs; this.aantal = aantal; this.aantal = aantal; } private double prijs; private double prijs; private int aantal; private int aantal; public double getFactuurLijnPrijs(){ public double getFactuurLijnPrijs(){ return prijs * aantal; return prijs * aantal; }}
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 13 Compilatie en test-run C:\javaoef>javac factuurApp\FactuurAppTest.java C:\javaoef>java factuurApp.FactuurAppTest Alles werkt prima (2 tests uitgevoerd)