在不创建文件的情况下测试outputstream.write(<String>)

Ana*_*and 11 java testing tdd mockito

我正在测试java中的输出流,如下所示.

    Writer outputStream = getOutputStream(fileName);
    if(outputStream != null) {
        try {
            outputStream.write(inputText);
        }
        finally {
            outputStream.close();
        }
    }
    else {
        throw new IOException("Output stream is null");
    }
Run Code Online (Sandbox Code Playgroud)

我正在写一个mockito测试,如下所示

public void testFileWrite() throws IOException {
    when(testObj.getOutputStream(outputFileNameValidValue)).thenReturn(outputStreamMock);
    doNothing().when(outputStreamMock).write(Matchers.anyString());
    doNothing().when(bufferedReaderMock).close();

    testObj.write(outputFileNameValidValue, reveredFileInput);

    verify(outputStreamMock).write(Matchers.anyString());
    verify(outputStreamMock).close();
}
Run Code Online (Sandbox Code Playgroud)

问题是在创建OutputStreamWriter(new FileOutputStream(filename))磁盘上创建物理文件时.

我们可以测试Outputstream.write而不实际在磁盘上写文件吗?

谢谢阿南德

Pet*_*rey 13

您可以使用ByteArrayOutputStream将数据写入内存.您可以使用ByteArrayInputStream来读取它.

另一种方法是编写一个期望的OutputStream,它会在您尝试写入错误的字节时立即失败.这有助于确切了解测试失败的确切位置/原因.