Java NIO and Fake Filesystems
Jun 14, 2021 at 16:43
Java NIO
I need to write some unit tests against some code that used the filesystem.
Java has a few mock/in-memory filesystems, jimfs
being one of the more popular ones.
It “mocks” out Path
and the implementation of toFile()
is to throw and UnsupportedOperationException
because old-style Java operations are only supported on the ‘default’ filesystem, and thus cannot be ‘mocked’ out.
The technique we need, is to use java.nio.Paths
and java.nio.Files
.
Since we are working with Path
objects and streams, the correct way to obtain a stream that is usable with both the default filesystem and something like jimfs
is:
val fs = Jimfs.newFileSystem()
val path = fs.getPath("some/path")
val inputStream = Files.newInputStream(path)
// val outputStream = Files.newOutputStream(path)
/dev/null
In some cases you may want to disregard output, in which case Java supports OutputStream.nullOutputStream()
which discards all bytes.