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.
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
.
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.
Tags und Links java testing jersey servlets freemarker