Есть ли простой способ протестировать (в Junit), если содержимое входного потока равно содержимому выходного?Утверждение InputStream и выходной поток равны
ответ
Во-первых, попытаться преобразовать OutputStream к InputStream, есть интересное объяснение в этом посте: How to convert OutputStream to InputStream?
Когда у вас есть два InputStream, вы можете сравнить, как с помощью кода на:
http://www.java2s.com/Code/Java/File-Input-Output/ComparethecontentsoftwoStreamstodetermineiftheyareequalornot.htm
Не проще сравнивать содержимое двух файлов? – user3727540
Если потоки являются файлами, вы можете использовать commons-io FileUtils.contentEquals [https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils. HTML # contentEquals (java.io.File,% 20java.io.File)] – rbv
Не только нет простого способа проверить это, нет никакого способа сделать это сравнение в общем случае.
- Выходной поток представляет собой абстракцию, которая позволяет реализовать только записи для потоков передачи и забывания. Нет общего способа вернуть то, что было написано.
- Входной поток может не разрешить перемотку. Это не проблема, потому что вы можете быть в порядке с «деструктивными» чтениями, но нужно быть осторожным и в этой области.
Вам необходимо сделать свою собственную обертку вокруг выходного потока, передать ее тестируемой программе и затем собрать то, что было записано в нее. После этого вы можете прочитать свой входной поток и сравнить его контент с тем, что было захвачено.
ByteArrayOutputStream
может помочь вам получить вывод кода, который вы тестируете. Commons IO предоставляют два класса, которые могут быть полезны - TeeInputStream
и TeeOutputStream
.
Нет встроенного способа, но вы все равно сможете его протестировать. Это зависит от того, что вы делаете. Вот простой случай ...
Скажем, если у меня был этот метод ...
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);
}
}
Так что я не тестирование если выходные и входные потоки «равны», но вместо этого я делаю утверждения о том, что на самом деле делает метод.
Надеюсь, это поможет.
- 1. Java/Android - Запись в выходной поток после чтения из Inputstream
- 2. Swift 3 входной поток и выходной поток, но без потока
- 3. Java: OutputStream и InputStream
- 4. Java перенаправлять входной и выходной поток
- 5. Входной поток Java быстрее, чем выходной поток
- 6. Выходной поток экрана захвата
- 7. Bluetooth - выходной поток
- 8. «Отключить» выходной поток
- 9. Получить выходной поток Python
- 10. Выходной поток между потоками
- 11. Выходной поток JMF
- 12. калитки загрузить выходной поток
- 13. PHP: закрыть выходной поток
- 14. Выходной поток для отладки
- 15. Выходной поток над StringBuilder
- 16. cin ест выходной поток
- 17. Выходной поток на appengine
- 18. Как «параметризовать» выходной поток?
- 19. Java SSL Вход/Выходной поток не работает
- 20. Почему утверждение терпит неудачу, когда значения равны
- 21. Утверждение, если два 2D-массива равны
- 22. Должен ли я закрывать выходной поток сервлета?
- 23. AssertionError - выходной шум. Как показать только утверждение
- 24. Выходной поток, записывающий больше, что читается - C#
- 25. Получите выходной поток продолжительного процесса
- 26. Закрытие ящика Java Выходной поток
- 27. HttpURLConnection Сообщение: выходной поток не влияет?
- 28. Выходной поток HttpWebResponse не закрывается
- 29. Выходной поток на веб-страницу
- 30. собирают выходной РДД как поток
Мне не хватает контекста. Можете ли вы поделиться кодом (или, по крайней мере, подписи) метода, который вы пытаетесь проверить? – Mureinik
Собираетесь ли вы писать * UnitTest * s (в отличие от записи * приемочного/отклоняющего теста * s с использованием JUnitFramework)? Если вы сначала замените Input/OutputStream на Mocks (используя Mokito или аналогичный), вы можете проверить, что то, что вы настроили для возврата IS, переносится в ОС ... –
Позвольте мне объяснить, что я здесь делаю: I получила функцию, которая сортирует данные, поступающие из входного потока (данные XML) и записывает результат в предоставленный выходной поток. Я хотел бы проверить, соответствует ли полученное содержимое выходного потока (записанному в файле) ожидаемому содержимому файла. – user3727540