Модульное тестирование записи в сокет в Scala - PullRequest
0 голосов
/ 27 октября 2019

У меня есть следующий код, который дает сокет, записывает содержимое в сокет и на основе этого возвращает Right или Left

class Gateway {
  def sendEvent(
                 str: String,
                 socket: Socket): Either[CustomException, String] = {
    Try {
      val writer =
        new BufferedWriter(new OutputStreamWriter(socket.getOutputStream))


      writer.write(s"${str}\n")
      writer.flush()
    } match {
      case Success(_) => Right(str)
      case Failure(_) => Left(CustomException)
    }
  }
}

Я пытаюсь выполнить модульное тестирование sendEventметод. Однако строка

new BufferedWriter(new OutputStreamWriter(socket.getOutputStream))

не позволяет мне сделать это. Теперь я не могу передать BufferedWriter в качестве зависимости, так как мне нужно всегда открывать новое соединение.

Я использую Scalatest и Mockito для тестирования. Будем весьма благодарны за любые идеи о том, как выполнить модульное тестирование этого кода. Заранее спасибо !!!

1 Ответ

1 голос
/ 27 октября 2019

Я думаю, что нет смысла в модульном тестировании этого класса, кроме красивого отчета о покрытии тестов.

Этот код, по моему мнению, скорее должен косвенно охватываться интеграционным тестом для более крупного модуля.

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

Такой тест скорее подтвердит ваше понимание рабочего процесса сокета, а не бизнес-логики.

...