Versions Compared

Key

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

jextest er et såkalt DSL (domenespesifikt språk) for å gjøre det lettere å skrive JUnit-tester.

Mange av oppgavene på denne wiki'n lenker til JExercise-tester, slik at en kan teste koden en skriver undervies og se om den tilfredsstiller kravene i oppgaven. jextest er et eget språk, som er bygget på Java og som kan brukes for å skrive slike tester. Målet med jextest er tredelt:

  • gjøre testene lettere å forstå - logikken bak testene skal kunne leses og forstås godt nok til at en både skjønner hva og hvordan ens kode testes og forstår feilmeldingene en får når testen oppdager feil
  • gjøre det raskere å skrive tester - for å kunne produsere et stort utvalg av oppgaver med tilhørende tester er det viktig at det ikke tar lang tid å skrive en test
  • senke terskelen for å skrive tester - det er fint om læringsassistenter og andre med mindre erfaring kan bidra med oppgaver og tester

jextest er basert på idéen bak objekttilstandsdiagrammer: at objekter forandrer tilstand ved kall på metoder og at oppførselen kan spesifiseres/beskrives med eksempler på sekvenser av slike tilstandsoverganger. Hvis man har tegnet et objekttilstandsdiagram som er dekkende for forventede oppførsel, så skal det å kode en test på at denne oppførselen er korrekt implementert være nokså rett frem.

Oppførselen til Counter-klassen fra Tilstand og oppførsel kan for eksempel beskriveses med følgende diagram og testes med jextest-koden til høyre

PlantUML Macro
object "#1:Counter" as counter1 {
	counter = 1
	end = 3
}

counter1 ..> counter1 : getCounter() => 1
 
object "#1:Counter" as counter2 {
	counter = 2
	end = 3
}
counter1 ..> counter2 : count()
counter2 ..> counter2 : getCounter() => 2
 
object "#1:Counter" as counter3 {
	counter = 3
	end = 3
}
counter2 ..> counter3 : count()
counter3 ..> counter3 : getCounter() => 3
counter3 ..> counter3 : count()
Code Block
test stateandbehavior.Counter

instance Counter counter = new Counter(1, 3)

sequence example1 {
	-->
	state {
		counter == 1
	}
	-- count() -->
	state {
		counter == 2
	}
	-- count() -->
	state #final {
		counter == 3
	}
	-- count() --> #final
}

Diagrammet helt til venstre illustrerer oppførselen til Counter-klassen ved å vise hvordan et Counter-objekt endrer tilstand når count()-metoden kalles, inntil counter-verdien har nådd slutt-verdien (end).

jextest-koden til venstre beskriver hvordan en instans opprettet med new Counter(1, 3) drives gjennom en sekvens med tilstander ved kall til count()-metoden, inntil siste tilstand gjentas. jextest-koden er på en måte en tekstlig formulering av diagram-logikken, som kan oversettes til Java og utføres som en vanlig JUnit-test.