我使用specs2作为我的测试框架。 我想测试一段很大程度上依赖于未来的代码。
例如,这是一段代码:
def register(x: Int){
val f1 = dao1.save(x)
.map{
f2 = dao2.save(x)
f2.onFailure{
case t => action.revert()
}
f2
}
f1.onFailure{
case t => action.revert()
}
f1
}
我想测试dao2.save(x)失败的场景。 在这种情况下,我希望action.revert()执行两次。
问题是当我实际测试它时,在模拟dao2时,断言发生在onFailure内容执行之前。 因此,在我的笔记本电脑上,所有测试都通过了,但是在构建服务器上(其中的东西有点慢),它失败了。
处理这种情况有什么好方法吗?
谢谢!
答案 0 :(得分:0)
您可以使用Await.ready(f1, timeout)
等待将来完成。之后你可以查看你的断言。
val f1 = dao1.save(x)
.flatMap{
f2 = dao2.save(x)
f2.onFailure{
case t => action.revert()
}
f2
}
f1.onFailure{
case t => action.revert()
}
f1
Await.ready(f1, timeout)