Java Powermockito在存根FileOutputStream时抛出OutOfMemory异常
我不知道为什么会发生这种情况,但是当我运行测试代码时,我得到了一个OutOfMemoryException 测试: 测试类别:Java Powermockito在存根FileOutputStream时抛出OutOfMemory异常,java,powermock,Java,Powermock,我不知道为什么会发生这种情况,但是当我运行测试代码时,我得到了一个OutOfMemoryException 测试: 测试类别: public class UploadBulkRefundAction extends MossoAction { @Override public ActionForward execute(ActionMapping mapping, ActionForm f, HttpServletRequest request, HttpServletResponse
public class UploadBulkRefundAction extends MossoAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm f, HttpServletRequest request, HttpServletResponse response) throws Exception {
BulkRefundsForm bulkRefundsForm=(BulkRefundsForm)f;
File tempFile = storeExcelSheetInATempFile(bulkRefundsForm);
return null;
}
private File storeExcelSheetInATempFile(BulkRefundsForm bulkRefundsForm) throws IOException {
InputStream inputStream=null;
FileOutputStream outputStream=null;
try{
File tempFile = File.createTempFile("tomcat-", "bulkrefunds.xlsx");
inputStream = bulkRefundsForm.getSpreadsheetFile().getInputStream();
outputStream = new FileOutputStream(tempFile);
IOUtils.copy(inputStream, outputStream);
return tempFile;
}finally{
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(outputStream);
}
}
}
包含一个循环,如果InputStream
无法从其read()
方法返回值'-1',该循环将永远不会终止
我猜您的mock默认情况下将从返回类型为
int
的方法返回“0”,因此您的测试代码将进入一个无限循环,该循环无休止地将4k大小的字节数组写入OutputStream
非常感谢。我用下面的附加行修复了它:PowerMockito.when(is.read(any(byte[].class)))。然后返回(1,-1);不知道我怎么会错过它。。
public class UploadBulkRefundAction extends MossoAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm f, HttpServletRequest request, HttpServletResponse response) throws Exception {
BulkRefundsForm bulkRefundsForm=(BulkRefundsForm)f;
File tempFile = storeExcelSheetInATempFile(bulkRefundsForm);
return null;
}
private File storeExcelSheetInATempFile(BulkRefundsForm bulkRefundsForm) throws IOException {
InputStream inputStream=null;
FileOutputStream outputStream=null;
try{
File tempFile = File.createTempFile("tomcat-", "bulkrefunds.xlsx");
inputStream = bulkRefundsForm.getSpreadsheetFile().getInputStream();
outputStream = new FileOutputStream(tempFile);
IOUtils.copy(inputStream, outputStream);
return tempFile;
}finally{
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(outputStream);
}
}
}