2012-01-10 3 views
2

Я использую Spring 3.0 org.springframework.web.multipart.commons.CommonsMultipartFile для загрузки файлов. Я хочу записать блок тестирования для загрузки файлов с помощью Mockito.Как написать модульный тест для CommonsMultipartFile с макетом весной

Ниже мой класс контроллера

private RegistrationService registrationService; 

@RequestMapping(method = RequestMethod.POST) 
    public String create(Registration registration, BindingResult result,ModelMap model) 
      throws NumberFormatException, Exception { 

     File uploadedFile = uploadFile(registration); 
     List<Registration> userDetails = new ArrayList<Registration>(); 
     processUploadedFile(uploadedFile,userDetails); 

     model.addAttribute("userDetails", userDetails); 

     return "Registration"; 
    } 

    private File uploadFile(Registration registration) { 

     Date dt = new Date(); 
     SimpleDateFormat format = new SimpleDateFormat("MM_dd_yyyy_HH_mm_ss"); 
     File uploadedFile = new File(uploadFileLocation 
       + registration.getFileData().getOriginalFilename() + "." 
       + format.format(dt)); 

     try { 
      registration.getFileData().transferTo(uploadedFile); 

     } catch (IllegalStateException e) { 
      logger.error("Error occurred while uploading file", e); 
     } catch (IOException e) { 
      logger.error("Error occurred while uploading file", e); 
     } 

     return uploadedFile; 
    } 

    private void processUploadedFile(File uploadedFile, List<Registration> userDetails) 
      throws NumberFormatException, Exception { 

     registrationService.processFile(uploadedFile, userDetails); 
    } 

Регистрация класс

public class Registration { 
    private String name; 
    private CommonsMultipartFile fileData; 


    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public CommonsMultipartFile getFileData() { 
     return fileData; 
    } 

    public void setFileData(CommonsMultipartFile fileData) { 
     this.fileData = fileData; 
    } 
} 

Мой метод Класс обслуживания

public void processFile(File uploadedFile, 
      List<Registration> userDetails) throws NumberFormatException, 
      Exception {  

     String record = ""; 

     try { 

      FileWriter fstream = new FileWriter(outputFileLocation 
        + uploadedFile.getName()); 
      BufferedWriter out = new BufferedWriter(fstream); 

      BufferedReader br = new BufferedReader(new FileReader(
        uploadedFile.getAbsolutePath())); 

      while ((record = br.readLine()) != null) { 
       String[] requesterUser = record.split(","); 

       if (insertUserToDB(requesterUser, userDetails) > 0) 
        out.write(record + ", Yes"); 
       else 
        out.write(record + ", No"); 

       out.newLine(); 

      } 
      out.flush(); 
      out.close(); 

     } catch (FileNotFoundException e) { 
      logger.error("Error occured while processing file", e); 
     } catch (IOException e) { 

      logger.error("Error occured while processing file", e); 
     } 


    } 

Как Test Unit это? Я новичок в Mockito.

Редактировать

меня записать метод испытаний для тестирования кода выше, но возвращать нуль для multipartFile. Как проверить тестовый метод processFile класса?

@Test 
     public void testProcessFile() { 
     private static final String TEST_FILE = "c:\\user.csv"; 
     MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); 
     MockMultipartHttpServletRequest mockMultipartHttpServletRequest = (MockMultipartHttpServletRequest)request; 
     MultipartFile multipartFile = (MultipartFile) mockMultipartHttpServletRequest.getFile(TEST_FILE); 

     Registration registration=new Registration(); 
     registration.setFileData(multipartFile); 
     RegistrationService.processFile(uploadedFile, userDetails); 
     } 

Я новичок в JUnit и mockito. Любая помощь или указатель действительно оценили.

ответ

6

Heinrich Filter правый, но вам также необходимо изменить тип поля fileData от CommonsMulitPartFile до org.springframework.web.multipart.MultipartFile. (Это супер интерфейс выше CommonsMulitPartFile и MockMultipartFile.

Если вы сделаете это, то вы можете создать макет из нескольких частей файла itselfe с фиктивным объектом, который обеспечивается пружиной

MockMultipartFile mockMultipartFile = new MockMultipartFile(
    "fileData", 
    fileName, 
    "text/plain", 
    content); 
+0

У меня есть запись вниз Метод тестирования с использованием org.springframework.web.multipart.MultipartFile, но для multipartFile он возвращает значение null. – Raje

+0

Я думаю, это потому, что вы не помещаете какой-либо контент в объект MockMultipartFile (см. пример в моем ответе). BTW: приведения в ваши тесты не нужны! – Ralph