如何检查Java 8 Stream是否关闭?

时间:2019-03-28 11:12:19

标签: unit-testing java-8 stream

我有一个带有底层IOStream的Java 8流,我想确保我的方法关闭该流。

有什么办法可以通过单元测试进行检查吗?

2 个答案:

答案 0 :(得分:1)

我认为为Stream的onClose方法提供处理程序是最简单的方法。

AtomicBoolean wasClosed = new AtomicBoolean(false);
Stream<> stream = Stream.of(foo, bar).onClose(() -> wasClosed.set(true));

// ...code under test that uses the stream

assertThat(wasClosed.get()).isTrue();

对于它的价值,我合法地需要进行测试,因为我们是从JDBC ResultSets中生成Streams的,而实际的Stream依赖于onClose来关闭ResultSet。

答案 1 :(得分:0)

  

流具有BaseStream.close()方法并实现AutoCloseable,但是实际上几乎所有流实例在使用后实际上都不需要关闭。通常,只有源是IO通道的流(例如,由Files.lines(Path,Charset)返回的流)才需要关闭。大多数流都由集合,数组或生成函数支持,而无需特殊的资源管理。 (如果确实需要关闭流,则可以在try-with-resources语句中将其声明为资源。)

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html