Как написать Junit-тест для загрузки Excel?

#java #excel #testing #junit #apache-poi

#java #excel #тестирование #junit #apache-poi

Вопрос:

ребята.Я новичок в изучении Java.И теперь я должен написать Junit-тест функции загрузки Excel в демонстрационном проекте моей компании.

 @RequestMapping(value = "/excelImport")
public ModelAndView excelImport(@RequestParam(value = "filename")MultipartFile file,
        ModelAndView mav) {
    session.setAttribute("imported",false);//セッションのインポート記録をリセットして、次の操作を影響しないように
    List<RetirementPayAndHealthInsurance> errorList= new ArrayList<>();//エラーデータリスト
    List<RetirementPayAndHealthInsurance> importList = new ArrayList<>();//導入されたデータリスト
    int wnt = 0;//エラー数
    int cnt = 0;//正常数
    String fileName = file.getOriginalFilename();
    if(file.isEmpty()) {    //ファイル選択なしにインポートボタンを押す場合
        mav.setViewName("redirect:/retailList");
        return mav;
    }else {

        try {
            Map<String,List<RetirementPayAndHealthInsurance>> map = retirementPayAndHealthInsuranceService.batchImport(fileName, file);
            errorList = map.get("errorList");
            importList = map.get("importList");
        } catch (Exception e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
        if(errorList!=null) {//エラーリストあるの場合
            wnt = errorList.size();//エラー数
            mav.addObject("errorList",errorList);
            session.setAttribute("errorList", errorList);
        }
        if(importList!=null) {
            cnt = importList.size();//正常数
        }
        //インポートボタン と 導出ボタンを分けるため設定の記録
        session.setAttribute("imported",true);
        mav.addObject("wnt",wnt);//エラー数
        mav.addObject("cnt",cnt);//正常数
        mav.setViewName("/retailExcelImport");
        return mav;
    }
}
  

я объясню свою логику ниже.

Загрузка Excel будет обработана и покажет нам номер успешно импортированных данных и ошибку либо, служба помещает список успешных операций, список ошибок в map и возвращает контроллеру, затем подсчитывает их размер.Затем я мог бы экспортировать и повторно отредактировать данные об ошибке и повторять этот процесс до тех пор, пока он не будет завершен.

Теперь я хочу написать junit-тест для этого .Но я не могу найти аналогичный образец теста загрузки Excel, помогите мне, пожалуйста, спасибо!

Ответ №1:

Вы могли бы создать MockMultiPartFile и передать его своему тестируемому методу:

 MultipartFile file = new MockMultipartFile("filename", "someTestFile.xls", "application/vnd.ms-excel", new ClassPathResource("someTestFile.xls").getInputStream());
  

Где someTestFile.xls находится файл в вашей test/resources папке. Аргумент "filename" должен совпадать со значением, используемым в @RequestParam; @RequestParam(value = "filename")

Ответ №2:

Нет необходимости автоматизировать загрузку файла Excel. Предположим, что ваш браузер работает должным образом. Но вы должны протестировать обработку данных.

В вашем testcase вы должны:

  1. Подготовьте некоторые тестовые данные: создайте MultipartFile testDataFile , ModelAndView testDataMav
  2. Создать вызов метода excelImport(testDataFile, testDataMav)
  3. Сравните возвращаемое значение со значением, которое вы ожидаете