Как написать модульный тест для CommonsMultipartFile с помощью Mock in Spring - PullRequest
2 голосов
/ 10 января 2012

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

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

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);
        }


    }

Как выполнить его модульное тестирование?Я новичок в Mockito.

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

Я записал метод Test для тестирования приведенного выше кода, но для 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.Любая помощь или указатель очень ценятся.

Ответы [ 2 ]

11 голосов
/ 10 января 2012

Возможно, вы захотите использовать реализацию Spring Mock (org.springframework.mock.web.MockMultipartFile), а не создавать макет с помощью Mockito.

6 голосов
/ 10 января 2012

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

Если вы сделали это, то можете создать макет многоэлементного файла itselfe с помощью фиктивного объекта, предоставленного spring

MockMultipartFile mockMultipartFile = new MockMultipartFile(
    "fileData",
    fileName,
    "text/plain",
    content);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...