2016-10-24 3 views
1

Ich schreibe Test für einen Spring Rest Service, der die URL zu einem anderen Spring Service umleitet. Das Ziel besteht also darin, das Lesezeichen unter Verwendung eines Lesezeichennamens zu finden. Der erste Dienst erhält die BookmarkID den Lesezeichen-Namen verwenden und dann leitet es die URL, das Objekt zu laden, basierend auf dem BookmarkIDmockmvc Load Redirect URL

ich einfach die URL Redirect testen verwenden, funktioniert die unter feinen

mockMvc.perform(get("/bookmarks/name/" + "sample")) 
       .andExpect(status().isMovedPermanently()).andExpect(redirectedUrl("/bookmarks/" + bookmark.getKey())); 

, was ich will ist der nächste schritt und rufe die nächste url auf und lade das bookmark objekt, wie mache ich das ??

Antwort

2

Genau das tun, was ein Web-Browser tun würde - folgen Sie der Umleitung durch die URL der Aufforderung, in Location Header erhalten: obwohl

mockMvc.perform(get("/bookmarks/" + bookmark.getKey())).andExpect(...) 

Dies ist ein separater Testfall ist. So sollte ein TC testen, ob Sie tatsächlich umgeleitet werden, und der andere, der den bookmarks/{id} Endpunkt testet.

EDIT (13. Juni 2017)

Es ist ein Feature-Request in Spring Framework Bugtracker zu ermöglichen MockMVC Umleitungen zu folgen (SPR-14342 Improve MockMvc to follow redirects and forwards). Es wurde Anfang dieses Jahres jedoch mit dem folgenden Kommentar zurückgewiesen:

Auflösung als "wird nicht behoben", da allgemeine Unterstützung für die Weiterleitung weit über den Umfang der MockHttpServletRequest. Erwägen Sie, direkt mit der weitergeleiteten URL zu testen und die Anforderung so einzurichten, wie es zum Zeitpunkt der Weiterleitung erwartet wird.

+0

yeah Ich mache das schon und frage mich, ob diese beiden Schritte in einem kombiniert werden könnten – developer2015

+0

Momentan ist es mit MockMvc nicht möglich. Es wird in Betracht gezogen, 'MockMvc' Redirects zu folgen: [SPR-14342] (https://jira.spring.io/browse/SPR-14342). Fürs Erste könnten Sie [MockMvcWebConnection] (http://docs.spring.io/spring-test-htmlunit/docs/current/api/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.html) verwenden. Beachten Sie, dass dies jedoch eine völlig andere API ist. Ich werde meine Antwort später mit einem Beispiel aktualisieren, wenn ich eine Minute finde. – jannis