JUnit benutzerdefinierter Runner mit Spring-Anwendungskontext

8

Ich bin ziemlich neu bei Spring und arbeite mit einer Reihe von JUnit 4.7-Integrationstests für eine Webanwendung. Ich habe eine Reihe von Testfällen des Formulars:

%Vor%

Meine Anwendung verfügt über eine Reihe von externen Abhängigkeiten, die ich testen möchte. Alle haben Beans, die durch das Laden von testContext.xml initialisiert werden. Einige dieser externen Abhängigkeiten erfordern benutzerdefinierten Code, um die erforderlichen Ressourcen zu initialisieren und abzureißen.

Anstatt diesen Code in jeder Testklasse zu duplizieren, die ihn erfordert, möchte ich ihn in einen gemeinsamen Speicherort einbetten. Mein Gedanke war, eine separate Kontextdefinition sowie einen benutzerdefinierten Runner zu erstellen, der SpringJUnit4ClassRunner erweitert und die @ContextConfiguration-Annotation und den zugehörigen benutzerdefinierten Code enthält, wie folgt:

%Vor%

Ich könnte dann jede Testklasse ihren anwendbaren Läufer mit angeben lassen:

%Vor%

Wenn ich dies tue, werden meine Tests ausgeführt und die richtigen Methoden withBeforeClasses und withAfterClasses ausgeführt. Es wird jedoch kein ApplicationContext an die Testklasse zurückgegeben und alle meine Tests schlagen fehl mit:

  

java.lang.IllegalArgumentException:   Ein ApplicationContext kann nicht geladen werden   mit einem NULL 'contextLoader'. Erwägen   Kommentieren Sie Ihre Testklasse mit   @ContextConfiguration.

Der Kontext wird nur korrekt geladen, wenn ich die @ContextConfiguration-Annotation für jede Testklasse festlege - im Idealfall möchte ich, dass diese Annotation mit dem Handler-Code für die Ressourcen lebt, für die sie zuständig ist. Was mich zu meiner Frage führt - ist es möglich, Spring-Kontextinformationen aus einer benutzerdefinierten Runner-Klasse zu laden?

    
DrewCo 20.04.2011, 17:02
quelle

1 Antwort

13

Sie können eine Basis-Testklasse erstellen - @ContextConfiguration kann vererbt werden, ebenso wie @Before , @After und so weiter:

%Vor%     
axtavt 20.04.2011, 17:08
quelle