Das Spring MVC-Testframework schlägt mit der HTTP-Antwort 406 fehl

8

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)

    
MatthiasLaug 02.01.2013, 14:52
quelle

8 Antworten

12

Wenn Sie eine @Configuration Klasse haben, können Sie die hinzufügen %Code% Annotation anstelle einer XML-Konfiguration mit @EnableWebMvc .

    
Rüdiger Schulz 18.11.2013 19:00
quelle
3

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:

%Vor%

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:

%Vor%

... mit:

%Vor%     
Arjan 23.01.2013 18:41
quelle
3

Sie müssen den folgenden Code zu spring xml hinzufügen, um POJO in jackson zu serialisieren.

%Vor%     
Rajith Delantha 13.03.2013 10:46
quelle
2

Es ist notwendig, sowohl @EnableWebMvc und .accept(MediaType.APPLICATION_JSON)

    
Max Farsikov 01.09.2016 20:32
quelle
1

Sie vermissen <mvc:annotation-driven /> in der Konfigurations-XML-Datei.

    
AlesMrak 17.07.2013 06:36
quelle
0

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)

    
NimChimpsky 02.01.2013 14:56
quelle
0

Ich denke, das Problem besteht darin, die Anfrage auf diese Weise zu ändern:

%Vor%     
Biju Kunjummen 02.01.2013 15:52
quelle
0

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%     
Charles Shi 11.04.2013 06:35
quelle