是否有任何简单的方法来测试(在Junit中)输入流的内容是否等于输出流的内容?
答案 0 :(得分:0)
不仅没有简单的方法来测试它,在一般情况下也无法进行这种比较。
您需要在输出流周围创建自己的包装器,将其传递给正在测试的程序,然后收集已写入的内容。之后,您可以阅读输入流,并将其内容与已捕获的内容进行比较。
ByteArrayOutputStream
可以帮助您捕获您测试的代码的输出。 Commons IO提供了两个可能有用的课程 - TeeInputStream
和TeeOutputStream
。
答案 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