Versions Compared

Key

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

...

Enhetstesting er testing av de minste enhetene i et program, i praksis enkeltklasser og deres metoder. Ved testing av metoder, vil en typisk rigge opp en eller flere instans, kalle metodene med ulike argumenter og sammenligne returverdiene med fasiten. Dette vil imidlertid ikke teste et annet viktig aspekt ved metoder, nemlig når og hvilke unntak som utløses, f.eks. når argumenter er ugyldige. Testing av dette er ikke like rett frem som ved testing av returverdier, og derfor trenger en å kjenne ulike teknikker for å teste unntak.

Det enkleste hadde vært om det fantes en assertException-metode i JUnit-rammeverket. En slik metode er imidlertid umulig å implementere, fordi unntak gir en spesiell typer kontrollflyt, som avbryter den ordinære kontrollflyten som brukes ved metodekall. Derfor må vi istedenfor lage testkode tilpasset den ekstraordinære unntakskontrollflyten.

Den vanlige teknikken for å håndtere unntak er bruk av try/catch, som gir følgende kontrollflyt:

Heldigvis finnes det en egen JUnit-metode for å test unntak, nemlig assertThrows. Den brukes som følger:

Code Block
t
Code Block
try {
   // kode som kan gi unntak
   ...
   // kode som kjøres dersom det ikke utløses noe unntak
   ...
} catch (Exception1 exception1) {
   // kode som håndtere unntak av type Exception1
   ...
} catch (Exception2 exception2) {
   // kode som håndtere unntak av type Exception2
   ...
} catch (Exception exception) {
   // kode som håndtere andre unntak enn Exception1 og Exception2
   ...
}

Når man tester unntak, så vil man typisk ønske å sjekke om kontrollflyten fortsetter som vanlig eller havner i en bestemt catch-del. For å angi at en bestemt kontrollflyten ikke er som forventet, dvs. "hit skulle man ikke kommet", kaller man fail()-metoden, som rett og slett gir feilmelding umiddelbart, omtrent som om en brukte assertTrue(true). Anta f.eks. at konstruktøren i Counter-klassen fra Enhetstesting med JUnit skal utløse en IllegalArgumentException, dersom end-verdien er mindre enn start-verdien. Da må en teste begge tilfeller, både når en forventer unntak av denne typen og når en ikke forventer det, gjerne i hver sin test-metode:

...