Здравствуйте, подскажите, как протестировать код, в котором внутри есть бесконечный цикл? У меня есть метод структуры, который из вне запускается как горутина. Всё, что он делает - это прослушивание канала и вызов другого метода структуры, чтобы обработать сообщение из канала.
func (p *ReceivedEventsBrokerHandler) ListenForReceivedEvents() {
for event := range p.eventsChanel {
p.SendEvent(event)
}
}
Я уже покрыл тестами метод SendEvent и теперь хочу разобраться с ListenForReceivedEvents. В тесте, я создаю канал, создаю сообщение для него и кладу в канал. Затем, закрываю канал. Потом создаю все зависимости для основной структуры, вызываю её конструктор, вызываю метод ListenForReceivedEvents и ниже прописываю ассерты для сообщения (у него должны поменяться несколько полей). Но мой тест блокируется, приходится его принудительно завершать. Но почему? Я ведь закрываю предварительно канал и for range в моём представлении должен проитерировать все сообщения в нём, а затем метод должен завершиться. Я пытался переписать for range на for select и внутри получать события через eveny, ok := <- p.eventsChanel и затем внутри проверять, что канал закрыт, его длина == 0 и делать return из метода, но тест всё равно продолжает висеть.