Frage

Ich versuche meine Anwendung mit junit zu testen.

Deshalb habe ich die folgende Klasse eingerichtet:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/META-INF/spring/applicationContext-test.xml" )
@TransactionConfiguration
@Transactional
public class DispatcherServletTest extends AbstractJUnit4SpringContextTests {

    private MockHttpServletRequest request;
    private MockHttpServletResponse response;

    private DispatcherServlet dispatcher;

    @Before
    public void setUp() throws Exception {
            request = new MockHttpServletRequest();
            response = new MockHttpServletResponse();

            MockServletConfig config = new MockServletConfig("myapp");
            config.addInitParameter("contextConfigLocation","classpath*:webmvc-config.xml");

            dispatcher = new DispatcherServlet();
            dispatcher.init(config);
    }
    //test cases

}

Das Problem ist also, dass mein Dispatcher-Servlet anscheinend keine Anforderung an einen meiner Controller senden kann.

Ich denke, dass die Konfiguration etwas enthält - contextConfigurationLocation. Es sieht so aus, als ob er die Datei finden kann (andernfalls würde dies eine Ausnahme auslösen), lädt jedoch keine Konfiguration

Der Logger sagt:

org.springframework.web.servlet.PageNotFound - Keine Zuordnung für HTTP-Anforderung mit URI [http:// localhost: 8080 / myapp / abc] gefunden

Aber ich habe absolut keine Ahnung, was los ist ...

Ich würde mich über jede Hilfe freuen!

Vielen Dank im Voraus

War es hilfreich?

Lösung

Minen funktionieren einwandfrei. Versuchen Sie die folgenden Optimierungen.

  1. Wenn Sie Junit4 verwenden und Ihre Testklasse nicht erweitern müssen, sollte der Junit-Läufer den Trick ausführen.
  2. Laden Sie die Kontextkonfiguration über den Klassenpfad und stellen Sie sicher, dass Sie über den Testklassenpfad darauf zugreifen können

    @ContextConfiguration(locations={"classpath:applicationContext-test.xml"})

  3. Testen Sie dann einfach die mit Anmerkungen versehenen Controller.Ich mache es so:

        @Test
        @Transactional
        public void testAnnotatedListUser() throws Exception {
            MockHttpServletRequest request = new MockHttpServletRequest();
            MockHttpServletResponse response = new MockHttpServletResponse();
            AnnotationMethodHandlerAdapter handlerAdpt = new AnnotationMethodHandlerAdapter();
            request.setRequestURI("/you/URIhere");
            ModelAndView mav = handlerAdpt.handle(request, response, this.controller);
            assertEquals("Incorrect view name returned", "myexpectedviewname", mav.getViewName());
        }
    
    

Andere Tipps

In meiner Frage gibt es mehrere Probleme:

Zunächst ist es nicht möglich, die AbstractJUnit4SpringContextTests zu erweitern und @RunWith (...) zu verwenden, da dies dasselbe ist.

Zweitens sollten Sie nicht den dispatcherServlert, sondern einen Handler verwenden, indem Sie den Handler in Ihrer application.xml definieren und ihn im Testfall über den privaten Handler @Autowire Handler automatisch verdrahten ...

Dann sollte alles gut funktionieren!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top