diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/result/HandlerResultMatchers.java b/spring-test/src/main/java/org/springframework/test/web/servlet/result/HandlerResultMatchers.java index e1b0b6e500..591eeb8cb2 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/result/HandlerResultMatchers.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/result/HandlerResultMatchers.java @@ -24,6 +24,7 @@ import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.ResultMatcher; import org.springframework.util.ClassUtils; import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; @@ -73,6 +74,38 @@ public class HandlerResultMatchers { }; } + /** + * Assert the controller method used to process the request. The expected + * method is specified through a "mock" controller method invocation + * similar to {@link MvcUriComponentsBuilder#fromMethodCall(Object)}. + *
For example given this controller: + *
+ * @RestController
+ * static class SimpleController {
+ *
+ * @RequestMapping("/")
+ * public ResponseEntity handle() {
+ * return ResponseEntity.ok().build();
+ * }
+ * }
+ *
+ * A test can be performed: + *
+ * mockMvc.perform(get("/"))
+ * .andExpect(handler().methodCall(on(SimpleController.class).handle()));
+ *
+ */
+ public ResultMatcher methodCall(final Object info) {
+ return new ResultMatcher() {
+ @Override
+ public void match(MvcResult result) throws Exception {
+ HandlerMethod handlerMethod = getHandlerMethod(result);
+ Method method = ((MvcUriComponentsBuilder.MethodInvocationInfo) info).getControllerMethod();
+ assertEquals("HandlerMethod", method, handlerMethod.getMethod());
+ }
+ };
+ }
+
/**
* Assert the name of the controller method used to process the request
* using the given Hamcrest {@link Matcher}.
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/HandlerAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/HandlerAssertionTests.java
index 364fa70e33..902df20a2b 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/HandlerAssertionTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/HandlerAssertionTests.java
@@ -21,17 +21,19 @@ import java.lang.reflect.Method;
import org.junit.Before;
import org.junit.Test;
-import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
-import static org.hamcrest.Matchers.*;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.handler;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;
import static org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.on;
/**
@@ -53,6 +55,11 @@ public class HandlerAssertionTests {
this.mockMvc.perform(get("/")).andExpect(handler().handlerType(SimpleController.class));
}
+ @Test
+ public void testMethodCall() throws Exception {
+ this.mockMvc.perform(get("/")).andExpect(handler().methodCall(on(SimpleController.class).handle()));
+ }
+
@Test
public void testHandlerMethodNameEqualTo() throws Exception {
this.mockMvc.perform(get("/")).andExpect(handler().methodName("handle"));