我有一个案例课Employee
定义为case class Employee(.........fields.....)
我有一个方法说
def getEmployees(organization: String): Future[Seq[Employee]] = {
val result = employeeClient.getAllEmployees(organization)
// some logic on this list of Employees received from the
client and manipulate it to get finalListOfEmployees and return it
to caller of `getEmployees`//
finalListOfEmployees
//end //
}
现在,我使用scala模拟测试
getEmployees
。我不处理来自getEmployees
或不是recovering
的异常。这意味着出现在客户端方法getAllEmployees
上的异常将传回给getEmployees
的调用者。现在的问题是,我们需要测试这方面吗?
我的意思是以下测试会增加任何值吗?
"Fail with future" in { (mockEmployeeClient.getAllEmployees_).expects("SomeOrganization").returning(Future.failed(new Exception("failed"))
getEmployees("SomeOrganization).failed.futureValue.getMessage shouldBe "failed"
}
最佳答案
我认为应该进行测试,因为这里的语义似乎是getEmployees
的调用者,期望失败由失败的Future
表示。现在考虑如果有人重构getEmployees
从而通过返回空列表employeeClient.getAllEmployees(organization)
来恢复Future(Nil)
中的故障,会发生什么情况,将会发生什么情况
def getEmployees(organization: String): Future[Seq[Employee]] = {
val result = employeeClient.getAllEmployees(organization)
result.recover { case e => List.empty[Employee] }
...
}
一切都会像以前一样编译良好,但是语义突然之间就大不相同了。单元测试可以捕获语义上的这种变化,并提示我们要么删除重构,要么适当地更新
getEmployees
的调用者。