Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring中用Mock编写commonmultipartfile的单元测试_Java_Spring_Unit Testing_Spring Mvc_Mocking - Fatal编程技术网

Java 如何在Spring中用Mock编写commonmultipartfile的单元测试

Java 如何在Spring中用Mock编写commonmultipartfile的单元测试,java,spring,unit-testing,spring-mvc,mocking,Java,Spring,Unit Testing,Spring Mvc,Mocking,我正在使用Spring3.0org.springframework.web.multipart.commons.commons多部分文件上传文件。我想写下使用Mockito上传文件的单元测试用例 下面是我的控制器类 private RegistrationService registrationService; @RequestMapping(method = RequestMethod.POST) public String create(Registration registrat

我正在使用Spring3.0org.springframework.web.multipart.commons.commons多部分文件上传文件。我想写下使用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 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);
        }

        
    }

我是朱尼特和莫基托的新手。任何帮助或指针都很欣赏。

您可能想考虑使用Spring的模拟实现(),而不是使用MOCKITO创建模拟。

< P> Heinrich Filter是正确的,但是您还需要将字段
fileData
的类型从
commonmulitpartfile
更改为
org.springframework.web.multipart.MultipartFile
。(这是上面的超级接口
commonmulitpartfile
MockMultipartFile

如果您已经这样做了,那么您可以使用spring提供的mock对象来创建多部分文件的mock

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

我使用org.springframework.web.multipart.MultipartFile写下了测试方法,但对于MultipartFile,它返回空值。我想,这是因为您没有在MockMultipartFile对象中放入任何内容(请参见我回答中的示例)。顺便说一句:测试中的强制转换是不需要的!
@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);
        }
MockMultipartFile mockMultipartFile = new MockMultipartFile(
    "fileData",
    fileName,
    "text/plain",
    content);