Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Counter er ment å implementere en teller fra en start-verdi til 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 true, ellers false. Teller-verdien får vi tak i med getCounter()-metoden.

Code Block
public class Counter {
   private int start, end;
   private pos;
   public Counter(int start, int end) {
      this.start = start;
      this.end = end;
   }
   public int getCounter() {
      return this.pos;
   }
   public voidboolean count() {
      if (pos > end) {
         return;
      }
      this.pos = this.pos + 1;
   }
}

Før vi tester Counter-klassen, må vi formulere oppførselen som testbare utsagn (regler) om metode-kall og returverdier. La oss gjøre det for Counter-klassenEt utsagt som at telleren skal økes hver gang count() kalles, holder ikke, siden telleren er en del av den private tilstanden til klassen og ikke en del av klassens metode-grensesnitt. Her er utsagn kun om konstruktøren og metodene:

  • Etter at klassen er instansiert med new Counter(start, end) skal telleren ha startverdien, med andre ord må  getCounter() returnere start.
  • Etter et kall til count(), skal getCounter() returnere start + 1, men bare dersom denne verdien er mindre enn end.
  • Generelt: dersom getCounter() returnerer n og n er mindre enn end, så skal count() øke telleren og et nytt kall til getCounter() returnere n + 1.

 

...

  • getCounter() skal returnere én mer for hver gang count() kalles, med mindre verdien er blitt end.

Nå som reglene for oppførsel kun handler om kall til åpent tilgjengelige metoder, er det forholdsvis lett å skrive testkoden. Vi instansierer rett og slett Counter-objekter og utfører sekvenser med kall og sjekker 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
Counter counter = new Counter(1, 3);
assertEquals(1, getCounter());