Wie kann ich Spritzen ServletContext im Frühjahr unit-test?
Schreiben brauche ich einen jUnit test für eine ziemlich komplexe Anwendung, die läuft in einem Tomcat.
Schrieb ich eine Klasse, die baut meine Feder Kontext.
private static ApplicationContext
springContext = null;
springContext = new ClassPathXmlApplicationContext(
new String[] {"beans"....});
In der Anwendung, es ist ein Aufruf:
public class myClass implements ServletContextAware {
.... final String folder = **servletContext.getRealPath**("/example"); ...
}
alles ruiniert, weil die ServletContext
null ist.
Habe ich angefangen zu bauen ein mock-Objekt:
static ServletConfig servletConfigMock = createMock(ServletConfig.class);
static ServletContext servletContextMock = createMock(ServletContext.class);
@BeforeClass
public static void setUpBeforeClass() throws Exception {
expect(servletConfigMock.getServletContext())
.andReturn(servletContextMock).anyTimes();
expect(servletContextMock.getRealPath("/example"))
.andReturn("...fulllpath").anyTimes();
replay(servletConfigMock);
replay(servletContextMock);
}
Gibt es eine einfache Methode, um zu injizieren, die ServletContext
oder starten Sie die Tomcat mit einem deployment-Deskriptor an die Laufzeit des jUnit-test?
Ich bin mit: Spring, Maven, Tomcat 6 und EasyMock für die mock-Objekte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie eigentlich wollen, ist das testen der web-Schicht.
Es gibt ein paar Möglichkeiten, es zu tun:
MockServletContext
zur Verfügung gestellt von Frühling. Dies ist der beste Weg - Kontrolle der verlinkten Dokumentation, wie es zu tun.Wann immer Sie wollen zu injizieren etwas in einem test verwenden
ReflectionTestUtils
Die Komplikation rührt aus der Tatsache, dass die web-Ebene ist nicht ganz geeignet für unit-Tests. Es ist mehr ein Thema der funktionalen Tests.
Wenn es gibt Methoden, die scheinen geeignet für unit-Tests, die Sie vielleicht gehören zu den service-layer. Und Sie sollten keine Abhängigkeit von der
ServletContext