有没有什么简单的方法来测试(在Junit中)输入流的内容是否等于输出流的内容?
发布于 2016-12-31 20:23:20
不仅没有简单的方法来测试这一点,而且在一般情况下也无法进行这种比较。
您需要围绕输出流制作自己的包装器,将其传递给被测试的程序,然后获取已写入其中的内容。之后,您可以读取您的输入流,并将其内容与捕获的内容进行比较。
ByteArrayOutputStream可以帮助您捕获所测试代码的输出。Commons IO提供了两个可能有用的类- TeeInputStream和TeeOutputStream。
发布于 2016-12-31 20:28:18
没有内置的方法,但您仍然可以测试它。这取决于你在做什么。这里有一个简单的例子..。
假设我有这个方法..。
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);
    }
}因此,我并不是在测试输出流和输入流是否“相等”,而是在断言该方法的实际作用。
希望这能有所帮助。
https://stackoverflow.com/questions/41408217
复制相似问题