2
我想模擬InputStream(與InputStreams一樣)阻塞的單元測試中的行爲,直到有更多數據可用。這需要我以塊的形式向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
)。