2016-05-03 13 views
1

ich zu testen, bin versucht (durch Feder Test (MVC)) eine Steuerung, die verwendet servletRequest.getParts()Rahmen Anfrage Teile im Frühjahr Test mvc

Alles, was ich bisher gelesen habe, ist, dass MockMvcRequestBuilders.fileUpload().file() die Lösung. Aber ich kann es nicht funktionieren lassen. Ich schrieb den folgenden Test, der

MockMultipartHttpServletRequestBuilder builder = MockMvcRequestBuilders.fileUpload("/foo") 
      .file(new MockMultipartFile("file", new byte[] { 1, 2, 3, 4 })); 
MockHttpServletRequest rq = builder.buildRequest(null); 
Assert.assertEquals(1, rq.getParts().size()); // result 0 

versagt ich durch Feder Code ging, und der Anruf an file(...) fügt ein Element in List<MockMultipartFile> wenn getParts() ihre Elemente aus einer anderen Liste bekommt (Map<String, Part> parts)

Es muss einen anderen Weg zu tun es ...

bearbeiten 1

Der Code, den ich den Controller zu testen, bin mit ist:

ResultActions result = mockMvc.perform(
      MockMvcRequestBuilders.fileUpload(new URI("/url")).file("param", "expected".getBytes())) 
+0

Wie testen Sie das? Rufen Sie einfach die Controller-Methode auf oder verwenden Sie MockMvc. Wenn es Letzteres ist, benutzt du es falsch, wenn es das erstere ist, machst du es zu schwierig. –

+0

Ich benutze MockMvc. Ich habe den Code, den ich verwende, hinzugefügt –

+1

Ein 'MultipartFile' ist kein' Part', also wird das nicht funktionieren. Sie können nur Teile und afaik hinzufügen, die mit MockMvc derzeit nicht möglich sind. Ihre einzige Änderung ist wahrscheinlich, das 'Part' zu verspotten und es selbst hinzuzufügen, indem Sie einen benutzerdefinierten RequestBuilder erstellen. –

Antwort

2

Es gibt derzeit keine Unterstützung für das Testen mit javax.servlet.http.Part im Spring MVC Test Framework.

Folglich habe ich zwei Karten eingeführt dieses Manko in Spring Framework zur Adresse 5.0:

In der Zwischenzeit sollten Sie in der Lage sein Part selbst lustig zu machen und Registrieren Sie es in der vorbereiteten MockHttpServletRequest über eine benutzerdefinierte RequestPostProcessor.

Grüße,

Sam (Autor des Frühlings Testcontext Rahmen)

+0

Ich kann es nicht verspotten. In 'RequestPartServletServerHttpRequest' laufe ich in diese: 'this.headers = this.multipartRequest.getMultipartHeaders (this.partName); if (this.headers == null) { werfe neue MissingServletRequestPartException (partName); } ' – Snekse

+0

Hmmm ... es sieht so aus, als ob es nicht möglich sein wird, dies leicht zu erreichen, bevor SPR-14252 und SPR-14253 gelöst sind. Ich werde Ihre Kommentare zu diesen Problemen hinzufügen, so dass wir Ihre Erfahrung berücksichtigen. –

+1

FYI: Ich habe einen Abschnitt _Further Analysis_ zu https://jira.spring.io/browse/SPR-14252 eingeführt –