Java Powermockito在存根FileOutputStream时抛出OutOfMemory异常

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

我不知道为什么会发生这种情况,但是当我运行测试代码时,我得到了一个OutOfMemoryException

测试:

测试类别:

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);
        }
    }
}