我有一个连接到 websocket 并从一些真正外部系统获取流消息的方法。
简化版是:
def watchOrders(): Var[Option[Order]] = {
val value = Var[Option[Order]](None)
// onMessage( order => value.update(Some(order))
value
}
当我测试它(使用 scalatest)时,我想让它连接到真正的外部系统,并且只检查前 4 个命令:
test("watchOrders") {
var result = List.empty[Order]
val stream = client.watchOrders()
stream.foreach {
case Some(order) =>
result = depth :: result
if (result.size == 4) { // 1.
assert(orders should ...) // 2.
stream.kill() // 3.
}
case _ =>
}
Thread.sleep(10000) // 4.
}
我有4个问题:
- 检查前 4 个订单的方法是否正确?
take(4)
在 scala.rx中找不到方法 - 如果
assert
失败,测试仍然通过,如何解决? - 这是停止流的正确方法吗?
- 如果线程没有在此处休眠,则测试将通过
case Some(order)
从未运行的代码。有没有更好的等待方式?