#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 вы должны:
- Подготовьте некоторые тестовые данные: создайте
MultipartFile testDataFile
,ModelAndView testDataMav
- Создать вызов метода
excelImport(testDataFile, testDataMav)
- Сравните возвращаемое значение со значением, которое вы ожидаете