我有一个带签名的方法
def save(u: User): Future[Option[UserServiceError]]
我想用Specs2进行测试。
我有以下类型层次结构:
abstract class UserServiceError(message: String)
object UserAlreadyExist extends UserServiceError("User already exists")
然后,测试代码如下所示:
users.save(...) must beSome(users.UserAlreadyExist).await
所以我希望匹配器beSome
能够理解UserAlreadyExist
是方法签名中UserServiceError
的子类型。
但是,它给了我一个编译时类型检查错误
type mismatch;
[error] found : org.specs2.matcher.Matcher[scala.concurrent.Future[Option[core.model.services.UserService#UserAlreadyExist.type]]]
[error] required: org.specs2.matcher.Matcher[scala.concurrent.Future[Option[core.model.services.UserService#UserServiceError]]]
我有一种想法,我想念一些非常基本的东西,例如UserAlreadyExist.type
不应该与UserServiceError[without .type]
一致。
我在哪里做错了?
答案 0 :(得分:2)
我没有考虑到您可以在beSome()
内部使用匹配器,因此下一个更改测试代码有效(请参阅 beEqualTo ):
must beSome(beEqualTo(UserService.UserAlreadyExist)).await
我也将UserServiceError移动到了UserService的伴随对象中。