Versions Compared

Key

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

...

Ta som eksempel oppførselen som er illustrert med følgende tilstandsdiagrammer 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
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
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:

  • Vi kan ikke teste end-attributtet, siden det ikke finnes noen getter for denne verdien. Denne testes implisitt når en kommer til siste tilstand og counter-verdien forblir den samme.
  • getCounter() testes ikke eksplisitt, men brukes til å teste count(), siden slike enkle getter-metoder er banale å implementere.
  • Med utgangspunkt i én start-tilstand, så kan en sjekke en sekvens av tilstander. Men dersom en tilstand har flere transisjoner til nye tilstander, så må en får en ikke testet alle alternativer uten å måtte rigge opp objektene på nytt.
PlantUML Macro
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)
Oppførselen til

counter3 --> counter3 : count(
) og
1)
counter3 --> counter3 : count(
int
2)

...

Oppførselen til count(int)

Code Block
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());
}

...

Det er et par som er verdt å kommentere:

  • Vi kan ikke teste end-attributtet, siden det ikke finnes noen getter for denne verdien. Denne testes implisitt når en kommer til siste tilstand og counter-verdien forblir den samme.
  • getCounter() testes ikke eksplisitt, men brukes til å teste count(), siden slike enkle getter-metoder er banale å implementere.
  • Med utgangspunkt i én start-tilstand, så kan en sjekke en sekvens av tilstander. Men dersom en tilstand har flere transisjoner til nye tilstander, så må en får en ikke testet alle alternativer uten å måtte rigge opp objektene på nytt.

 

...