2016-05-23 3 views
0

У меня есть модульный тест для выполнения на основе следующего метода:Spring испытательной установки: IllegalStateException для MultipartHttpServletRequest

@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 

Любая идея, как я могу решить вышеупомянутый erro r сообщение пожалуйста?

+0

Устанавливая тест правильно. Вы запрашиваете, ответ и сеанс бесполезны. Они не используются, то же самое для настройки, которую вы делаете. В вашем '@ Before' вам нужно только настроить' MockMvc', и это все. Далее ваш запрос ошибочен, так как это обычный пост, а не многостраничный пост, который вы должны изменить тип контента. –

+0

Вы действительно хотите загрузить файл или просто wan, чтобы отправить два параметра запроса «licNo» и «queId»? Я не нашел код загрузки файла в тесте. – Braj

ответ

0

Вы должны загрузить файл, используя MockMvcRequestBuilders.fileUpload(), чтобы проверить MultipartHttpServletRequest его.

Например:

@Test 
public void uploadImage() throws Exception { 
    String data = "test-data"; 
    MockMultipartFile imageFile = new MockMultipartFile("image", "my-image.jpeg", "image/jpeg", data.getBytes()); 
    mockMvc.perform(MockMvcRequestBuilders.fileUpload("/query/att/handle").file(imageFile).param("queId", "123").param("licNo", "12")); 
} 

Вот thread для той же дискуссии вокруг него.


@RequestParam Использование аннотаций для доступа к параметру запроса вместо доступа к ним из HttpServletRequest. Spring framework делает это автоматически только для вас.

Например:

@RequestMapping(value = "/att/handle", method = RequestMethod.POST) 
public @ResponseBody 
String handleUpload(@RequestParam String licNo, @RequestParam String queId, ...) throws IOException { ... } 
0

Вы тестируете загрузку файла без какого-либо файла. Попробуйте протестировать метод контроллера с mockMvc.perform(fileUpload("/query/att/handle", variables).file("filename", data))

API документ: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.html#fileUpload-java.lang.String-java.lang.Object...-

 Смежные вопросы

  • Нет связанных вопросов^_^