Как сравнить два OutputSream'a, понять что содержимое эквивалентно?

176
22 октября 2018, 00:20

Пишу UT и столкнулся с тем, что нужно сравнить expected и actual(полученный в ходе выполнения теста) потоки OutputStream. Как это лучше сделать, желательно задействовав меньше кода?

Answer 1

OutputStream - это интерфейс, т.е. для тестирования нужно использоавть отдельный класс имплементирующий этот интерфейс.

Например ByteArrayOutputStream, используется для того чтобы ложить туда данные, а затем извлекать данные из него с помощью toByteArray(). Это не будет проверкой того, как оно записывается в поток (по одному байту за раз или в виде большого буфера), но, как правило, вам все равно это не нужно.

Вот простой код, который выполняет тестирование System.out:

public class SysOutTest {
    private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    @Before
    public void before() {
        System.setOut(new PrintStream(baos));
    }
    @After
    public void after() {
        System.setOut(null);
    }
    @Test
    public void test() {
        System.out.print("привет!");
        assertEquals("привет!", baos.toString());
    }
}
Answer 2

Попробуйте так:

byte[] a = {1, 2, 3};
ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
outputStream1.write(a);
byte[] b = {1, 2, 3};
ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream();
outputStream2.write(b);
System.out.println(Arrays.equals(outputStream1.toByteArray(), 
           outputStream2.toByteArray()));

Дальше остается только вызвать нужный assert в тесте:

assertTrue(Arrays.equals(outputStream1.toByteArray(), 
           outputStream2.toByteArray()));

Или, как правильно написали в другом ответе, можно не доставать массив байтов.

READ ALSO
Выравнивание HTML CSS

Выравнивание HTML CSS

Как сделать так, чтобы поля ввода с текстом выравнивались как на фото? Заранее спасибо

169
сделать скролинг блока по вертикали

сделать скролинг блока по вертикали

На странице есть блок с видео и текстовым контентом справа от негоКак сделать так, чтобы у текстового контента был только вертикальный скролл...

141
Ошибка с выводом элементов canvas

Ошибка с выводом элементов canvas

Нужно разместить несколько элементов на холстеДелаю через цикл, всё должно работать по-моему, но ничего на холсте не отображается

142