我有一个方法连接到websocket并从一些真正的外部系统获取流消息。
简化版本是:
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
当我测试它(使用scalatest)时,我想让它连接到真正的外部系统,并且只检查前4个命令:
def watchOrders(): Var[Option[Order]] = {
val value = Var[Option[Order]](None)
// onMessage( order => value.update(Some(order))
value
}
我有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.
}
方法
take(4)
失败,测试仍然通过,如何解决?assert
中从未运行的代码。还有更好的等待方式吗?答案 0 :(得分:1)
您可以考虑从Var中获取List的一种方法是使用.fold
组合器。
您遇到的另一个问题是处理数据的异步性质 - 假设您真的想在测试代码中与外部真实世界系统进行对话(即,这更接近集成测试方面),他们希望看看scalatest对异步测试的支持,并且可能会做一些事情,例如在你积累列表中的4个元素时可以完成的承诺构建未来。