Versions Compared

Key

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

...

Ta som eksempel oppførselen som er illustrert i Tilstand og oppførsel og vist under til venstre. Slike tilstandsdiagrammer er relativt rett frem å oversette til testkode: En rigger først opp objektene i start-tilstanden, ved å opprette objektene og sette attributtene. Så utføres kallet på en av transisjonene før en sjekker at tilstanden etterpå er slik diagrammet krever. Dersom tilstanden er feil så rapporteres dette, ellers så fortsetter en med denne tilstanden som utgangspunkt for videre testing. Denne teknikker er brukt i testkoden under til høyre.

PlantUML Macro
titleOppførselen til count()
object "Counter" as counter1 {
	counter = 1
	end = 3
}

counter1 --> counter1 : getCounter() => 1
 
object "Counter" as counter2 {
	counter = 2
	end = 3
}
counter1 --> counter2 : count()
counter2 --> counter2 : getCounter() => 2
 
object "Counter" as counter3 {
	counter = 3
	end = 3
}
counter2 --> counter3 : count()
counter3 --> counter3 : getCounter() => 3
counter3 --> counter3 : count()

Oppførselen til count() og getCounter()

Code Block
languagejava
titleTest av oppførselen til count()
Counter counter = new Counter(1, 3);
if (getCounter() != 1) {
	throw new IllegalStateException("Expected that counter was 1, but actually it was " + getCounter());
}
counter.count();
if (getCounter() != 2) {
	throw new IllegalStateException("Expected that counter was 2, but actually it was " + getCounter());
}
counter.count();
if (getCounter() != 3) {
	throw new IllegalStateException("Expected that counter was 3, but actually it was " + getCounter());
}
counter.count();
if (getCounter() != 3) {
	throw new IllegalStateException("Expected that counter was 3, but actually it was " + getCounter());
}
Test av oppførselen til count()


 Det er et par som er verdt å kommentere:

...

Nedenfor vises oppførselen til en alternativ count-metode, hvor argumentet angir hvor langt det skal telles. Siden vi her har en forgreining, må vi teste ulike sekvenser for seg, ved å rigge opp start-tilstanden på nytt. Dette illustrerer også problemet med å teste metoder som tar argumenter: En må jo egentlig prøve alle mulige verdier for å sjekke at oppførsel er riktig for dem alle, og dette er i praksis umulig.

PlantUML Macro
titleOppførselen til count(int)
object "Counter" as counter1 {
	counter = 1
	end = 3
}
 
object "Counter" as counter2 {
	counter = 2
	end = 3
}
counter1 --> counter2 : count(1)
 
object "Counter" as counter3 {
	counter = 3
	end = 3
}
counter2 --> counter3 : count(1)
counter1 --> counter3 : count(2)
counter2 --> counter3 : count(2) 

Oppførselen til count(int)

Code Block
languagejava
titleTest av oppførselen til count(int)
Counter counter = new Counter(1, 3);
counter.count(1);
if (getCounter() != 2) {
	throw new IllegalStateException("Expected that counter was 2, but actually it was " + getCounter());
}
counter.count(1);
if (getCounter() != 3) {
	throw new IllegalStateException("Expected that counter was 3, but actually it was " + getCounter());
}
// test other path
counter = new Counter(1, 3);
counter.count(2);
if (getCounter() != 3) {
	throw new IllegalStateException("Expected that counter was 3, but actually it was " + getCounter());
}
// test yet another path
counter = new Counter(2, 3);
counter.count(2);
if (getCounter() != 3) {
	throw new IllegalStateException("Expected that counter was 3, but actually it was " + getCounter());
}

Det at det ikke er noen transisjoner fra den siste tilstanden, kan bety at alle kall til count(int) er ulovlige og utløser unntak, og utløsing av unntak er også oppførsel det er viktig å teste at er korrekt implementert.

 I kommentaren til