Юнит-тестирование и интерфейс потоков
От: f95.2  
Дата: 09.04.20 23:25
Оценка:
Привет всем.
Похоже, придется мне скоро нырнуть в джаву без скафандра, так что скоро заспамлю этот форум вопросами.
Это первый.

Я делаю тренировочный проект — клиентскую программку, которая общается с сервером по сети через потоки, которые я снимаю с сокета.
Т.е. есть объект, реализующий функционал, ему при создании передаются эти потоки.

Однако, в целях юнит-тестирования я хочу использовать не потоки с сокета, а потоки,
которые могу наполнять сам — например, ByteArrayInputStream/ByteArrayOutputStream.
Т.е. создаю входной и выходной потоки, и объект тестируемого класса, которому эти потоки отдаются.

Хочу протестировать, что при отправки во входной поток определенного сообщения на выходе будет ожидаемое сообщение.

Проблема в том, что входные данные внутри тестируемого объекта могут перевариваться некоторое время (зависит от теста),
и данные в выходной поток поступят не сразу.

Вопрос: как правильно их дождаться?

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

В идеале, хотелось бы какой-то аналог плюсового basic_iostream, чтобы тестируемый класс туда писал, а тест оттуда читал и проверял данные.

Как в джаве принято такое делать? Писать свой класс потока?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.