【发布时间】:2021-06-25 16:39:57
【问题描述】:
我的 restful 服务接受一个文件参数,其内容是一个 Apache SS (XSSF) 工作簿。该方法遍历工作簿的单元格并根据单元格的值采取各种操作。
我构思了一个 Junit 测试,我在其中实例化和填充 Apache SS 工作簿,将其添加到“文件”对象,然后将“文件”对象传递给被测方法。我遇到的主要问题是如何使用 Workbook 对象实例化“文件”对象。
以下是被测方法的示例(省略与工作簿无关的细节),然后是我正在尝试做的伪代码示例:
/* Method under test */
public Object workbookProcessing(HttpServletRequest request) {
List<Part> workbookParts = request.getParts().collect(Collectors.toList());
for (Part workbookPart : workbookParts) {
InputStream workbookContent = workbookPart.getInputStream();
Workbook workbook = WorkbookFactory.create(workbookContent);
// ...
}
/* Junit test pseudo-code */
public void testWorkbookProcessing() {
RestfulService rs = new RestfulService();
Workbook wb = WorkbookFactory.create(true) // Create XSSF workbook
CreationHelper createHelper = wb.getCreationHelper();
Sheet sheet = wb.createSheet("Sheet 1");
Row row = sheet.createRow(0);
row.createCell(0).setCellValue(createHelper.createRichTextString("Row 1 Cell 1"));
row.createCell(1).setCellValue(12345678);
// ...
HttpServletRequest request = new HttpServletRequest(); // Create HttpServletRequest
// Create InputStream, using above Workbook <- Help!
// Create Part object from InputStream <- Help!
request.addPart(inputStream); // Add Part object to request
ResponseEntity re = rs.workbookProcessing(request);
assertEquals(200, re.getStatusCodeValue());
}
或者,如果有办法模拟工作簿及其单元格值,我也很乐意这样做。
【问题讨论】: