如何模拟javax.servlet.ServletInputStream
发布时间:2020-12-14 23:56:16 所属栏目:Java 来源:网络整理
导读:我正在创建一些单元测试并尝试模拟一些调用.这是我在工作代码中的内容: String soapRequest = (SimUtil.readInputStream(request.getInputStream())).toString();if (soapRequest.equals("My String")) { ... } 和SimUtil.readInputSteam看起来像这样: Str
我正在创建一些单元测试并尝试模拟一些调用.这是我在工作代码中的内容:
String soapRequest = (SimUtil.readInputStream(request.getInputStream())).toString(); if (soapRequest.equals("My String")) { ... } 和SimUtil.readInputSteam看起来像这样: StringBuffer sb = new StringBuffer(); BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(inputStream)); final int buffSize = 1024; char[] buf = new char[buffSize]; int numRead = 0; while ((numRead = reader.read(buf)) != -1) { String readData = String.valueOf(buf,numRead); sb.append(readData); buf = new char[buffSize]; } } catch (IOException e) { LOG.error(e.getMessage(),e); } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { LOG.error(e.getMessage(),e); } } 我想要做的是request.getInputStream(),流返回某些String. HttpServletRequest request = mock(HttpServletRequest.class); ServletInputStream inputStream = mock(ServletInputStream.class); when(request.getInputStream()).thenReturn(inputStream); 所以这是我想要的条件 when(inputStream.read()).thenReturn("My String".toInt()); 任何帮助将不胜感激. 解决方法
不要模拟InputStream.而是使用.将String转换为字节数组
getBytes()方法.然后使用数组作为输入创建一个ByteArrayInputStream,以便在消耗时返回String,每次返回每个字节.接下来,创建一个ServletInputStream,它包装一个常规的InputStream,就像Spring中的那样: public class DelegatingServletInputStream extends ServletInputStream { private final InputStream sourceStream; /** * Create a DelegatingServletInputStream for the given source stream. * @param sourceStream the source stream (never <code>null</code>) */ public DelegatingServletInputStream(InputStream sourceStream) { Assert.notNull(sourceStream,"Source InputStream must not be null"); this.sourceStream = sourceStream; } /** * Return the underlying source stream (never <code>null</code>). */ public final InputStream getSourceStream() { return this.sourceStream; } public int read() throws IOException { return this.sourceStream.read(); } public void close() throws IOException { super.close(); this.sourceStream.close(); } } 最后,HttpServletRequest mock将返回此DelegatingServletInputStream对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |