You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

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

1.1:Countercounter = 1end = 31.1:Countercounter = 2end = 31.1:Countercounter = 3end = 3getCounter() => 1count()getCounter() => 2count()getCounter() => 3count()
test stateandbehavior.Counter

instance Counter counter = new Counter(1, 3)

sequence example {
	-->
	state {
		getCounter() == 1
	}
	-- count() -->
	state {
		getCounter() == 2
	}
	-- count() -->
	state #final {
		getCounter() == 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.

Hver sekvens oversettes til én test-metode som utfører koden i transisjonene og tester tilstanden før og etter. F.eks. vil sekvensen med navn example i eksempet gi opphav til metoden testExample(), som JUnit-rammeverket gjenkjenner som en testmetode. Hver tilstand er en sekvens med (som oftest logiske) uttrykk, som oversettes til kall til en assert-metode (akkurat hvilken avhenger av typen uttrykk).

Koden for uttrykk og setninger som brukes i transisjoner og tilstander følger syntaksen til Xbase-språket (del av Xtext-rammeverket), som gir kompakt og lettlest kode.

 

  • No labels