如何对产生InputStream的方法进行单元测试?

时间:2014-06-27 15:03:10

标签: java unit-testing inputstream junit4

在处理了一些字节后,我有一个生成一个InputStream的方法。从设计的角度来看这是正确的。 但是,如何对返回InputStream的方法进行单元测试 - 可以进行哪些有效的断言? (检查大小,将其转换为文件/字节并检查文件是否有效?还有什么?)

2 个答案:

答案 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,从已知值的字节数组中读取。