2015-01-25 1 views
2

У меня есть метод с подписьюКак сравнить тип результата как подкласс абстрактного класса в соответствии с?

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].

Где я делаю это неправильно?

ответ

2

я не принял во внимание, что вы можете иметь matchers внутри beSome() так с рядом изменений тестовый код работает (см beEqualTo):

must beSome(beEqualTo(UserService.UserAlreadyExist)).await 

я переехал UserServiceError годов в объект компаньон UserService также.