Herhaling Java-programmatie en geautomatiseerd testen (vervolg) Internetapplicaties Deel 16: Herhaling Java-programmatie en geautomatiseerd testen (vervolg) Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg) Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Opgave met inheritance Een kaartclub kan gewone leden en ereleden hebben. Ereleden betalen een jaarbijdrage in EUR van 200 min 10 keer hun aantal kleinkinderen. Gewone leden betalen een jaarbijdrage in EUR van 100 min hun aantal kleinkinderen (+/-Use case) De totale som van de jaarbijdragen van alle leden van een club moet kunnen opgevraagd worden. Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Opmerkingen Hier en daar hebben we in de oplossing een attribuut toegevoegd om de betekenis van de klasse te verduidelijken: vb clubNaam van de Kaartclub-klasse. Het is een goed idee om vooraf een UML-klassediagram van de oplossing te tekenen. Maar dit hoef je echt niet met een case-tool te doen. Bovendien hoeft het niet al de attributen en al de methoden te bevatten. Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Klassendiagram Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Wijziging van het design Een pakket (zoals kaartclubApp) moet kunnen getest worden vanuit een ander pakket. Client-klassen gaan namelijk i.h.a. niet tot het pakket kaartclubApp zelf behoren ! Daarom verhuizen we de testklasse KaartclubAppTest.java naar zijn eigen pakket Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Wijziging van het design (We tonen hier maar 1 parameter) Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Bestandsorganisatie Directorystructuur met bestanden: c:\ javaoef test (directory EN package) Test.java (dient als superclass voor eigen testklase) kaartclubAppTest (directory EN package) KaartclubAppTest.java (eigen testklasse) kaartclubApp (directory EN package) Kaartclub.java Lid.java GewoonLid.java Erelid.java Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
KaartclubAppTest.java package kaartclubAppTest; import test.*; import kaartclubApp.*; public class KaartclubAppTest extends Test{ public static void main(String[] args){ (new KaartclubAppTest()).run(); } protected void compareAll(){ // Tests go here Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
We schrijven de tests eerst // In plaats van Tests go here schrijven we: // Het is normaal dat je eerst de constructor test // Dat doen wij hier niet omdat dat nogal triviaal is // en we niet de indruk willen geven dat er // alleen triviale tests bestaan Kaartclub club1; club1 = new Kaartclub("De Goede Ouden Tijd."); club1.voegErelidToe(1,"Janssens","Peerke",10); club1.voegGewoonLidToe(2,"Vandeperre","Florke",12); club1.voegGewoonLidToe(3,"Vandendriesse","Charel",7); compareAndReport(“totale jaarbijdrage", club1.getTotJaarbijdrage()+"", (200.0-10*10 + 100.0-12 + 100.0-7) + "" ); Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Kaartclub.java Bevat juist genoeg om te compileren. Alle tests falen uiteraard: package kaartclubApp; import java.util.ArrayList; public class Kaartclub{ public Kaartclub(String clubNaam){} public void voegGewoonLidToe(int lidnr, String naam, String voornaam, int aantKleinkinderen){ } public void voegErelidToe(int lidnr, String naam, String voornaam, public double getTotJaarbijdrage(){ return 0.0; Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Compilatie C:\javaoef>javac kaartclubAppTest\KaartClubAppTest.java De andere klassen worden mee gecompileerd want KaartclubAppTest gebruikt ze. Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
De test wordt uitgevoerd C:\javaoef>java kaartclubAppTest.KaartclubAppTest FOUT! club1.getTotJaarbijdrage() | berekend=0.0, verwacht=281.0 Totaal aantal fouten (fouten/tests): 1/1 Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Code aanvullen: Kaartclub.java package kaartclubApp; import java.util.ArrayList; public class Kaartclub{ public Kaartclub(String clubNaam){ this.clubNaam = clubNaam; } private String clubNaam; private ArrayList leden = new ArrayList(); public void voegGewoonLidToe(int lidnr, String naam, String voornaam, int aantKleinkinderen){ leden.add(new GewoonLid(lidnr, naam, voornaam, aantKleinkinderen)); public void voegErelidToe(int lidnr, String naam, String voornaam, int aantKleinkinderen){ leden.add(new Erelid(lidnr, naam, voornaam, aantKleinkinderen)); public double getTotJaarbijdrage(){ double totJaarbijdrage = 0.0; for (int i=0; i < leden.size(); i++){ Lid lid = (Lid) leden.get(i); totJaarbijdrage += lid.getJaarbijdrage(); return totJaarbijdrage; Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Lid.java package kaartclubApp; public abstract class Lid{ public Lid(int lidnr, String naam,String voornaam, int aantKleinkinderen){ this.aantKleinkinderen = aantKleinkinderen; } private int aantKleinkinderen; protected int getAantKleinkinderen(){ return aantKleinkinderen; public abstract double getJaarbijdrage(); Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
GewoonLid.java package kaartclubApp; public class GewoonLid extends Lid{ public GewoonLid(int lidnr, String naam, String voornaam, int aantKleinkinderen){ super(lidnr, naam, voornaam, aantKleinkinderen); } public double getJaarbijdrage(){ return 100 - getAantKleinkinderen(); Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
EreLid.java package kaartclubApp; public class Erelid extends Lid{ public Erelid(int lidnr, String naam, String voornaam, int aantKleinkinderen){ super(lidnr, naam, voornaam, aantKleinkinderen); } public double getJaarbijdrage(){ return 200 - 10*getAantKleinkinderen(); Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)
Compilatie en test-run C:\javaoef>javac kaartclubAppTest\KaartClubAppTest.java C:\javaoef>java kaartclubAppTest.KaartclubAppTest Alles werkt prima (1 tests uitgevoerd) Deel XVI: Herhaling java-programmatie en geautomatiseerd testen (vervolg)