【发布时间】:2019-10-26 22:36:01
【问题描述】:
我有以下代码给定一个套接字,将内容写入套接字并基于此返回 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 进行测试。任何关于如何对该代码进行单元测试的想法都将受到高度赞赏。提前谢谢!!!
【问题讨论】:
-
你应该在 finally 块中
closewriter(close通常调用flush)。在这种情况下,您可能更喜欢使用try-catch-finaly块而不是Try-match块。恕我直言,您应该在集成测试中替换单元测试,或者使用OutputStream而不是Socket。在这种情况下,您可以使用 Socket 添加其他方法。可能有测试库允许您覆盖getOutputStream。
标签: scala sockets mockito serversocket scalatest