specs2 - 用期货测试,控制执行线程

时间:2015-11-03 13:41:55

标签: scala unit-testing mockito specs2

我使用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内容执行之前。 因此,在我的笔记本电脑上,所有测试都通过了,但是在构建服务器上(其中的东西有点慢),它失败了。

处理这种情况有什么好方法吗?

谢谢!

1 个答案:

答案 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)