Я хочу протестировать некоторый код, который использует сетевую передачу. Код делает запрос и предоставляет обратный вызов - когда запрос завершается, обратный вызов запускается. Я хотел бы смоделировать передачу по сети и использовать Thread.sleep
для имитации некоторой задержки ... но, конечно, это заставит весь тест приостановиться.
До сих пор я создавал новые потоки и использовал CountDownLatch
es на протяжении всего теста, чтобы остановить завершение теста до запуска обратного вызова. Мой фиктивный сетевой объект создает новый поток, спит в этом потоке, а затем запускает обратный вызов. Это на самом деле работает довольно хорошо, но проблема в том, что о любых ошибках утверждения в обратном вызове не сообщается исходному потоку junit - вместо этого я получаю текст исключения в консоли, где его намного сложнее понять и использовать.
Я надеюсь, что есть либо:
- Способ передачи
assertEquals
вывода из порожденных потоков в главный выходной коллектор JUnit или
- Совершенно другой и лучший способ тестирования многопоточного кода в JUnit, или
- Какой-то способ симулировать асинхронный код в одном потоке
Спасибо за любые идеи!