簡體   English   中英

如何在Spring中用Mock編寫CommonsMultipartFile的單元測試

[英]How to write unit test for CommonsMultipartFile with Mock in Spring

我使用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它返回null。 我應該如何測試上面的服務類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的新手。 任何幫助或指針真的很感激。

您可能想要考慮使用Spring的Mock實現( org.springframework.mock.web.MockMultipartFile ),而不是使用Mockito創建模擬。

Heinrich Filter是正確的,但您還需要將字段fileData的類型從CommonsMulitPartFileorg.springframework.web.multipart.MultipartFile (這是CommonsMulitPartFileMockMultipartFile之上的超級接口。

如果你已經這樣做了,那么你可以使用spring提供的模擬對象創建一個多部分文件itselfe的模擬

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM