在处理了一些字节后,我有一个生成一个InputStream的方法。从设计的角度来看这是正确的。 但是,如何对返回InputStream的方法进行单元测试 - 可以进行哪些有效的断言? (检查大小,将其转换为文件/字节并检查文件是否有效?还有什么?)
答案 0 :(得分:1)
如果测试中的方法正在生成InputStream,则测试返回结果的最简单方法是读取流并检查返回的字节是否正确。
byte[] expectedAnswer = ...
InputStream actual = myMethodThatMakesInputStream();
ByteArrayOutputStream os = new ByteArrayOutputStream();
//Apache commons IO
IOUtils.copy(actual, os);
assertArrayEquals(expectedAnswer, os.toByteArray());
修改强>
正如其他海报Duncan的答案使用IOUtil.toByteArray( inputstream)
在内部使用我在答案中提供的ByteArrayOutputStream路线
答案 1 :(得分:1)
在类似情况下,我只是将输入流读入一个字节数组,并测试结果与我的预期相符。
InputStream inputStream = methodUnderTest(knownValue1, knownValue2, ...);
byte[] data = IOUtils.toByteArray(inputStream); // Apache Commons IO
assertArrayEquals(expectedData, data);
如果测试中的方法需要输入数据作为输入流,我给它一个ByteArrayInputStream
,从已知值的字节数组中读取。