Servlet-Context-Injection-Fehler bei Verwendung des Jersey-Testframeworks

8

Ich beginne mit Trikot und versuche, Freemarker mit TDD zu arbeiten. Ich möchte einen ViewProcessor für meine Vorlagen erstellen, aber den Servlet-Kontext in der Klasse nicht einfügen.

Hier ist der Klassencode:

%Vor%

Und hier ist der Testcode:

%Vor%

Ich verwende maven mit Abhängigkeiten wie folgt:

%Vor%

Mein Code funktioniert einwandfrei, wenn ich ihn auf meinem lokalen Jetty-Server deploye. Aber wenn ich den Code in meiner IDE testen möchte, konnte er den Servlet-Kontext nicht injizieren ( @Context ): myContext ist null , wenn ich den Test starte: /

Ich denke, ich vermisse etwas, aber ich bin ein absoluter Anfänger mit der Servlet-Welt.

    
Balistick 02.12.2010, 12:16
quelle

2 Antworten

0

Es gibt ein paar Möglichkeiten, es zu tun. Entfernen Sie den Konstruktor und implementieren Sie eine configure () -Methode wie folgt:

%Vor%

oder alternativ können Sie Ihren Test mit dem Spring-Kontext kommentieren:

%Vor%     
stringy05 12.02.2014 00:32
quelle
0

Es gibt eine Lösung für dieses Problem, die keine Feder erfordert, vorausgesetzt, Sie verwenden den Standard- / Standard-Grizzy2-Testframework-Anbieter. Laut dieser Antwort verwendet der Framework-Anbieter jersey-test-framework-provider-grizzly2 keine Servlet-Umgebung, um den Anwendungskontext zu erstellen. Ihre Symptome resultieren daraus, dass keine ServletContext Instanz zum injizieren vorhanden ist.

Die Problemumgehung besteht darin, den Testcontainer für die Komponententests selbst bereitzustellen. Ändern Sie zunächst Ihre Abhängigkeiten:

%Vor%

Ändern Sie dann Ihren Test, um einen Grizzy-Servlet-Container bereitzustellen:

%Vor%

Ich gehe davon aus, dass Sie dies in mehreren Unit-Tests verwenden werden, daher ist es möglicherweise sinnvoll, JerseyTest zu erweitern, damit diese allgemeine Konfiguration automatisch durchgeführt werden kann. Darüber hinaus kann es sich lohnen, org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory , um festzustellen, ob der Testcontainer, den Sie emulieren / aufbewahren möchten, Funktionen bereitstellt. Das bereitgestellte Beispiel sollte in Ihren Test eingefügt werden können, um zumindest zu bestätigen, dass dies ein Fix ist.

BEARBEITEN: In meiner eigenen Implementierung benötigte ich die Möglichkeit, beim Erzeugen des Servers immer noch ResourceConfig anzugeben. Ich vermute, dass dies für andere Benutzer von Jersey Test Framework wahrscheinlich der gängige Fall ist. Es folgt ein Arbeitsbeispiel für die vorgeschlagene TestContainerFactory .

%Vor%

Frustrierend, grizzly's GrizzlyWebContainerFactory wird einen Servlet-Kontext bereitstellen, aber nicht mit einer Ressourcen-Konfiguration konfigurieren. Umgekehrt konfiguriert GrizzlyHttpServerFactory eine Anwendung mit ResourceConfig , stellt jedoch keinen Webkontext zur Verfügung.

Wir können dies umgehen, indem wir WebappContext (erweitert ServletContext ) manuell erstellen, konfigurieren und dann in die Ressourcenkonfiguration mit Hilfe von AbstractBinder einfügen.

    
Rob Hall 03.02.2017 15:20
quelle