Пишу 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()));
Или, как правильно написали в другом ответе, можно не доставать массив байтов.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости