Пишу UT и столкнулся с тем, что нужно сравнить expected и actual(полученный в ходе выполнения теста) потоки OutputStream
. Как это лучше сделать, желательно задействовав меньше кода?
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());
}
}
Попробуйте так:
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()));
Или, как правильно написали в другом ответе, можно не доставать массив байтов.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как сделать так, чтобы поля ввода с текстом выравнивались как на фото? Заранее спасибо
На странице есть блок с видео и текстовым контентом справа от негоКак сделать так, чтобы у текстового контента был только вертикальный скролл...
Нужно разместить несколько элементов на холстеДелаю через цикл, всё должно работать по-моему, но ничего на холсте не отображается