19. november 2007 - 15:51Der er
6 kommentarer og 1 løsning
Junit: globale setup og teardown
Jeg vil gerne lave en global setup og teardown, der køres en gang for alle testene (ikke en gang for hver). Jeg har set forskellige måder at gøre dette på, men jeg har ikke kunnet finde noget der passer til mine behov:
Min test klasse, hvori selve testene er i, er en subklasse af BaseWebServiceTestCase som er en subklasse af BasePeriodofcareTestCase som er en subklasse af BaseTestCase som er en subklasse af TestCase.
De øverste to klasser i hierakiet bruges af en masse andre tests end den jeg laver og det er nødvendigt at der kun oprettes en global teardown/setup for lige præcis mine tests. Mit problem er så at de fleste "normale" løsninger til dette problem kræver at test klassen bliver en subklasse af en anden klasse (fx TestSetup). Andre løsninger umuliggør brug af protected variable fra superklasserne, hvilket jeg skal bruge.
Jeg har fundet en måde at lave en setup, ved at bruge følgende kode:
Dette kan dog ikke gøres tilsvarende for teardown, da der kan komme flere tests efterhånden. Det er også muligt kun at køre en test af gangen (fra eclipse), så jeg kan ikke bare tælle hvor mange tests der er kørt.
Jeg håber der er nogle der kan hjælpe, jeg kan ikke finde på nogle ordentlige løsninger.
Jeg har godt set den side du refererer til, men desværre kan jeg ikke bruge JUnit 4, da det er en lille del af et meget stort projekt, hvor der i forvejen bruges junit 3.
1) hvis det der skal laves er database orienteret så put global setup og global teardown kode i 2 separate main programmer og kør dem i ant før og efter junit
2) lave et hack af en eller anden slags - du har et hack for setup - kan du evt. bruge et shutdown hook til teardown ?
Jeg har prøvet med et shutdownhook, men da kan jeg ikke finde ud af at få adgang til superklassernes protected metoder. Her er det kode jeg har prøvet:
static { Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { for (int i = 0; i < presenceIds.length; i++) { try { pocHelper.deletePresence(pocHelper.getPresenceFromGSId(presenceIds[i])); } catch (NotFoundException e) { } } } }); }
Problemet er at pocHelper er en nedarvet variabel fra superklassen og når jeg kører ovenstående får jeg en nullpointerexception.
Hvis du kalder addShutdownHook i din global setup har du vel den nødvendige adgang og du kan jo altid lave en ikke anonym klasse med en constructor for at få info med over i den.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.