如何比较结果类型是 subclass of abstract class 来匹配?
How to compare result type to be subclass of abstract class to match to?
我有一个带有签名的方法
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]
。
我哪里做错了?
我没有考虑到你可以在 beSome()
中使用匹配器,所以接下来的更改测试代码可以工作(参见 beEqualTo):
must beSome(beEqualTo(UserService.UserAlreadyExist)).await
我也将 UserServiceError 移到了 UserService 的伴随对象中。
我有一个带有签名的方法
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]
。
我哪里做错了?
我没有考虑到你可以在 beSome()
中使用匹配器,所以接下来的更改测试代码可以工作(参见 beEqualTo):
must beSome(beEqualTo(UserService.UserAlreadyExist)).await
我也将 UserServiceError 移到了 UserService 的伴随对象中。