断言InputStream和Output流是相等的

时间:2016-12-31 12:16:22

标签: java junit assert

是否有任何简单的方法来测试(在Junit中)输入流的内容是否等于输出流的内容?

3 个答案:

答案 0 :(得分:0)

不仅没有简单的方法来测试它,在一般情况下也无法进行这种比较。

  • 输出流是一种抽象,允许对发送和遗忘流进行只写实现。没有通用的方法来取回已写的内容
  • 输入流可能不允许倒带。这不是一个问题,因为你可能会对“破坏性的”#34;读,但也需要在这方面小心。

您需要在输出流周围创建自己的包装器,将其传递给正在测试的程序,然后收集已写入的内容。之后,您可以阅读输入流,并将其内容与已捕获的内容进行比较。

ByteArrayOutputStream可以帮助您捕获您测试的代码的输出。 Commons IO提供了两个可能有用的课程 - TeeInputStreamTeeOutputStream

答案 1 :(得分:0)

没有内置方式,但您仍可以测试它。这取决于你在做什么。这是一个简单的案例......

说我是否有这种方法......

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.springframework.util.StreamUtils;

public class Stack {

    public static void copy(InputStream in, OutputStream out) {
        try {
            StreamUtils.copy(in, out);
        } catch(IOException io) {
            throw new RuntimeException("BOOM!");
        }
    }
}

我可以像这样测试这个方法......

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Arrays;

import org.junit.Test;

public class StackTest {

    @Test
    public void shouldCopyFromInputToOutput() {
        byte[] contents = new byte[] { 1, 2, 3 };

        ByteArrayOutputStream out = new ByteArrayOutputStream();

        Stack.copy(new ByteArrayInputStream(contents), out);

        byte[] written = out.toByteArray();

        assert Arrays.equals(contents, written);
    }
}

所以我没有测试输出和输入流是否等于#34;而是我正在对方法实际做的做出断言。

希望这有帮助。

答案 2 :(得分:0)

首先,尝试将OutputStream转换为InputStream,这篇文章中有一个有趣的解释:     How to convert OutputStream to InputStream?

当您有两个InputStream时,可以使用以下代码比较两者:

 http://www.java2s.com/Code/Java/File-Input-Output/ComparethecontentsoftwoStreamstodetermineiftheyareequalornot.htm