...
Counter
er ment å implementere en teller fra en start-verdi til (men ikke med) en slutt-verdi. Hver gang vi caller count()
-metoden, så skal telleren øke med 1, men bare dersom vi ennå ikke har nådd slutt-verdien. Idet slutt-verdien nås, så skal count()
returnere false
, ellers true
. Teller-verdien får vi tak i med getCounter()
-metoden.
Code Block |
---|
title | Første versjon av Counter-klasseklassen |
---|
linenumbers | true |
---|
|
public class Counter {
private int start, end, pos;
public Counter(int start, int end) {
this.start = start;
this.end = end;
}
public int getCounter() {
return this.pos;
}
public boolean count() {
if (pos > end) {
return false;
}
this.pos = this.pos + 1;
return true;
}
} |
...
- Etter at klassen er instansiert med
new Counter(start, end)
skal getCounter()
returnere start
. getCounter()
skal returnere én mer for hver gang count()
kalles, med mindre verdien er blitt end
.- Det kallet til
count()
som gjør at getCounter()
returnerer slutt-verdien returnerer end
, skal returnere true
false
, ellers false
true
.
Nå som utsagnene for oppførsel kun handler om kall til åpent tilgjengelige metoder, er det forholdsvis lett å skrive kode som tester dem. Vi instansierer rett og slett Counter-objekter og utfører sekvenser med kall og sjekker returverdier mot fasiten. JUnit-rammeverket har ferdiglagde metoder for det siste, altså å sammenligne en faktisk verdi med en forventet verdi. La oss se på testkoden for det første utsagnet over:
Code Block |
---|
title | Testkode for konstruktøren |
---|
linenumbers | true |
---|
|
Counter counter = new Counter(0, 2);
assertEquals(0, counter.getCounter()); |
Kallet til assertEquals sjekker Counter
-instansen som lages i første linje er ment å telle fra 0 til (og med) 2. Andre linje sjekker om getCounter() returnerer den forventede verdier 0. Generelt sjekker kall til assertEquals
om argumentene er like, det første argumentet er pr. kovensjon fasiten og det andre den faktiske (retur)verdien. For å sjekke det andre utsagnet må vi utføre et par runder med kall til getCounter()
og count()
, og sjekke returverdien mot fasiten for hvert kall:
Code Block |
---|
title | Testkode for count()-metoden |
---|
linenumbers | true |
---|
|
assertEquals(true, counter.count());
assertEquals(1, counter.getCounter());
assertEquals(false, counter.count());
assertEquals(2, counter.getCounter()); |
Code Block |
---|
title | Endelig versjon av Counter-klassen |
---|
linenumbers | true |
---|
|
public class Counter {
private int pos, end;
public Counter(int start, int end) {
this.pos = start;
this.end = end;
}
public int getCounter() {
return this.pos;
}
public boolean count() {
if (pos < end) {
this.pos = this.pos + 1;
}
return this.pos >= end;
}
} |