提交 4b118358 编写于 作者: R Rossen Stoyanchev

Add methodCall option to HandlerResultMatchers

Issue: SPR-13736
上级 1320da90
......@@ -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)}.
* <p>For example given this controller:
* <pre class="code">
* &#064;RestController
* static class SimpleController {
*
* &#064;RequestMapping("/")
* public ResponseEntity<Void> handle() {
* return ResponseEntity.ok().build();
* }
* }
* </pre>
* <p>A test can be performed:
* <pre class="code">
* mockMvc.perform(get("/"))
* .andExpect(handler().methodCall(on(SimpleController.class).handle()));
* </pre>
*/
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}.
......
......@@ -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"));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册