Versions Compared

Key

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

...

Strukturen til en jextest-fil er som følger:

 

test <navn på klasse som testes> [with <navn på testklasse>] [<beskrivelsestekst>] [@ <nettadresse>]

test-deklarasjonen inneholder som regel bare navnet på klassen som testes, men en kan også eksplisitt angi navnet på testklassen som genereres. I tillegg kan en legge inn en beskrivelse/dokumentasjonstekst og en nettadresse, f.eks. til wiki-siden for oppgaven.

test-deklarasjonen etterfølges av en import-del og en eller flere instance-, state-, sequence- og method-deklarasjoner.

import <type> Importerer type(navn), slik at en kan referere til dem uten pakkenavnet som prefiks.
instance ([<type>] <navn på instans>)+instance-delen inneholder én eller flere instance-deklarasjoner som lister opp type og navn til instansene som testes. Hvis typen ikke oppgis, så brukes typen til klassen som testes. Hvis en bare trenger én instans, så kan hele instance-delen utelates. En får da én instans med samme navn som typen, jextest-fila ikke inneholder noen instance-deklarasjoner, så får en automatisk én instans av typen som testes med navn like typenavnet (men med liten forbokstav, slik konvensjonen er).
state method [<type>] <navn> (<argumentliste>) { <uttrykk>* }state -delen inneholder én eller flere state-deklarasjoner som definerer tilstandsfunksjoner. En slik funksjon er som en vanlig brukes i test-sekvensene method-deklarasjonen definerer en tilstandsmetode, som tester tilstanden til en instans. Denne kan kalles fra state-deklarasjoner inni sequence-blokker, for å gjøre dem kortere, . state method-deklarasjonen angir type , navn og argumentlista til  på entil instansen (som testes av metoden), navn og argumentliste, som for vanlige metoder. Hvis typen ikke oppgis, så brukes typen til klassen som testes. Uttrykkene er som for state-deklarasjoner (se nedenfor).

sequence <navn> {
   [instance ([<type>] <navn på instans>)+]
   <før-tilstand>
   (
   <transisjon>
   <etter-tilstand>
   )+

<ettertilstand> }
 
method 

fds

 

...


}

sequence-blokken definerer en sekvens av tilstander og transisjoner som sammen tester oppførsel til et sett instanser for et gitt brukstilfelle. Inni sequence-blokken kan en ha flere instance-deklarasjoner, for instanser som bare brukes av i denne test-sekvensen.

Test-delen av sequence-blokken starter med en før-tilstand, som etterfølges av ett eller flere par av transisjoner og etter-tilstander. Det finnes også en variant som bare inneholder én tilstand og som er nyttig for å teste konstruktører. I dette tilfellet blir test-delen bare --> <tilstand>

En tilstand er vanligvis en state-deklarasjon, men det kan også være en referanse til en state-deklarasjon som er angitt med # <tilstandsnavn>.

En transisjon angis med -- <uttrykk> (, <uttrykk>)+ -->, altså en slags pil med én eller flere uttrykk (skilt med komma) inni, som peker på etter-tilstanden.

Det er også mulig å uttrykke at effekten av transisjonen er et unntak og ikke en etter-tilstand ved å erstatte --> med throws <unntaksklasse> og utelate den (vanligvis) påfølgende etter-tilstanden.

state [#<navn>] [instansnavn]
(
{
   <uttrykk>+
}
)+

state-deklarasjonen angir en sekvens av uttrykk som tester tilstanden til en instans. Instansnavnet kan utelates, når det bare er deklarert én instans for denne test-sekvensen. Hvis en oppgir #<navn> så kan en referere til denne tilstanden et annet sted, istedenfor å måtte ha en ny state-deklarasjon med de samme uttrykkene.

Hvert uttrykk tolkes som en utsagt om instansens tilstand og blir oversatt til bruk av JUnit-rammeverkets assert-metoder.  Det vanligste er varianten <uttrykk1> == <uttrykk2>, som blir oversatt til assertEquals(<uttrykk2>, <uttrykk1>) (merk rekkefølgen). Andre logiske uttrykk blir oversatt til assertTrue(<uttrykk>), mens uttrykk uten type (void), f.eks. kall til en hjelpemetode blir antatt å selv bruke assert-metoder og blir ikke oversatt.

method <returtype> <navn> (<argumentliste>) { <uttrykk>* }method-deklarasjonen definerer hjelpemetoder, som kan brukes for beregninger eller testkode som blir for komplisert til å ha inni tilstander og transisjoner. method-deklarasjonen angir returtype, navn og argumentliste, som for vanlige metoder.