Ich habe begonnen, das neue MVC-Testframework von Spring 3.2 zu verwenden, und bin bei der Suche nach 406 HTTP-Antwortcodes für alle meine Testfälle geblieben.
Der Testfall ist ganz einfach
%Vor%Die entsprechende Ressource ist
%Vor%Ich bin sicher, es liegt an einem falschen Medientyp, aber ich kann nicht herausfinden, warum.
Die Ablaufverfolgung des fehlerhaften Testfalls:
java.lang.AssertionError: Status erwartet: & lt; 200 & gt; aber war: & lt; 406 & gt; beim org.springframework.test.util.AssertionErrors.fail (AssertionErrors.java:60) beim org.springframework.test.util.AssertionErrors.assertEquals (AssertionErrors.java:89) beim org.springframework.test.web.servlet.result.StatusResultMatchers $ 5.match (StatusResultMatchers.java:546) beim org.springframework.test.web.servlet.MockMvc $ 1.undExpect (MockMvc.java:141) beim de.yourdelivery.rest.location.LocationResouceTest.testGetLocationByPlzPattern (LocationResouceTest.java:37) bei sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Methode) um sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) beim sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) bei java.lang.reflect.Method.invoke (Methode.java:597) um org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:45) beim org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:15) beim org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:42) beim org.junit.internal.runners.statements.InvokeMethod.evaluate (InvokeMethod.java:20) beim org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:28) beim org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate (RunBeforeTestMethodCallbacks.java:74) beim org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate (RunAfterTestMethodCallbacks.java:83) beim org.springframework.test.context.junit4.statements.SpringRepeat.evaluate (SpringRepeat.java:72) beim org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java:231) beim org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java:88) bei org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:231) um org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:60) um org.junit.runners.ParentRunner.runChildren (ParentRunner.java:229) um org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:50) um org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:222) um org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate (RunBeforeTestClassCallbacks.java:61) beim org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate (RunAfterTestClassCallbacks.java:71) an org.junit.runners.ParentRunner.run (ParentRunner.java:300) um org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner.java:174) beim org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:50) beim org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) beim org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) beim org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) beim org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) beim org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:197)
Wenn Sie eine @Configuration
Klasse haben, können Sie die hinzufügen
%Code%
Annotation anstelle einer XML-Konfiguration mit @EnableWebMvc
.
Dies kann daran liegen, dass im Kontext des Spring-Tests keine MVC-Konfiguration vorhanden ist. Wenn etwas wie folgt verwendet wird:
%Vor% ... dann sollte diese test-context.xml
-Datei auch Dinge enthalten wie:
Man kann leicht testen, ob das obige Problem auftritt, mit einem Controller, der nichts Spezielles vorgibt (z. B .: nein produces
in @RequestMapping
) und daher keine Inhaltsverhandlung benötigt:
... mit:
%Vor%Sie müssen den folgenden Code zu spring xml hinzufügen, um POJO in jackson zu serialisieren.
%Vor% Es ist notwendig, sowohl @EnableWebMvc
und .accept(MediaType.APPLICATION_JSON)
Der Weg, Dinge zu tun, ist, denke ich, eine HttpResponseEntity zu verwenden oder eine Modeland-Ansicht zurückzugeben. Zum Beispiel:
%Vor%(Ich wäre an jedem weiteren Fortschritt interessiert, den Sie machen, da alles ziemlich neu ist)
Ich denke, das Problem besteht darin, die Anfrage auf diese Weise zu ändern:
%Vor%Ich habe das selbe Problem gerade jetzt gelöst und wurde gelöst, indem ich den Rückgabetyp des Controllers in String änderte. Und geben Sie eine JSON-Zeichenfolge anstelle eines Objekts direkt zurück. Es funktioniert.
%Vor%Tags und Links java model-view-controller spring testing