我想在单元测试中模拟InputStream的行为,它会(像InputStream一样)阻塞直到有更多的数据可用。这需要我分块向InputStream追加字节,以便消费者也可以分块读取它们。就像这样:
@Test
public void readAllInput() throws Exception {
???InputStream in = ...; // ???
Consumer consumer = new Consumer(in);
Thread consumingThread = new Thread(consumer).start();
in.add("one".getBytes("UTF-8")); // ???
in.add("two".getBytes("UTF-8")); // ???
in.close();
consumingThread.join();
assertThat(consumer.getDataAsString()).isEqualTo("onetwo");
}
class Consumer implements Runnable {
private InputStream in;
private ByteArrayOutputStream out = new ByteArrayOutputStream();
public Consumer(InputStream in) {
this.in = in;
}
public void run() {
IOUtils.copy(in, out);
}
public String getDataAsString() {
return out.toString("UTF-8");
}
}
什么类型的InputStream(或其他解决方案)能让我在一端添加数据,在另一端消耗它们?
注意:使用者需要基于InputStream的API(而不是Reader)。