【发布时间】:2016-05-23 06:42:37
【问题描述】:
我有一个基于以下方法的单元测试:
@RequestMapping(value = "/query")
public class QueryController {
...
@RequestMapping(value = "/att/handle", method = RequestMethod.POST)
public @ResponseBody
String handleUpload(MultipartHttpServletRequest request, HttpServletResponse response) throws IOException {
JsonResponseDto responseDto = null;
HashMap<Long, String> attachmentInfoMap = null;
String licNo = request.getParameter("licNo");
String queId = request.getParameter("queId");
....
请在下面找到我的单元测试:
@RunWith(PowerMockRunner.class)
public class QueryControllerTest {
@InjectMocks
private QueryController queryController;
private MockMvc mockMvc;
private MockMultipartHttpServletRequest request;
private MockHttpServletResponse response;
private MockHttpSession session;
@Before
public void setup() {
request = new MockMultipartHttpServletRequest();
request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());
response = new MockHttpServletResponse();
session = new MockHttpSession();
request.setSession(session);
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
//Added viewResolver to prevent circular view path error
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
this.mockMvc = MockMvcBuilders.standaloneSetup(queryController).setViewResolvers(viewResolver).build();
}
@Test
public void handleUploadQueryAttachmentsOK() throws Exception {
mockMvc.perform(post("/query/att/handle").param("queId", "123").param("licNo", "12"))
.andExpect(status().isFound()
);
}
当我执行单元测试时,会显示以下错误:
java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: org.springframework.mock.web.MockHttpServletRequest
知道如何解决上述错误消息吗?
【问题讨论】:
-
通过正确设置您的测试。您的请求、响应和会话是无用的。那些没有被使用,你所做的设置也是如此。在您的
@Before中,您只需设置MockMvc即可。接下来您的请求有缺陷,因为它是普通帖子而不是多部分帖子,您应该更改内容类型。 -
您真的要上传文件还是只想发送两个请求参数“licNo”和“queId”?测试中没有找到任何文件上传代码。
标签: java unit-testing spring-mvc powermock spring-test-mvc