在Scala中,如何使用`Nothing`作为返回值来伪造方法?

时间:2015-03-02 03:10:10

标签: scala testing functional-programming mocking type-inference

我想创建一个名为save的方法,但尚未准备好实施它。但是,我不希望它在评估期间抛出异常。所以我试着让它返回Nothing作为结果。

def save[A <: AuthInfo](profile: CommonSocialProfile): Future[UserProfile] = {
  // To be done
  new Nothing()
}

但这不会起作用,编译器说:

  

类没有什么是抽象的;无法实例化

我还尝试???作为占位符,但这会引发NotImplementedError,这也不适合我的需求..

def save[A <: AuthInfo](profile: CommonSocialProfile): Future[UserProfile] = ???

有没有人有更简单的方法来伪造Scala中的方法?

1 个答案:

答案 0 :(得分:3)

由于您需要返回Future[UserProfile]类型的内容,因此您只需要编写一个假的UserProfile并将其返回。

所以,如果UserProfile定义如下:

class UserProfile(id: Int, name: String)

然后执行以下操作:

def save[A <: AuthInfo](profile: CommonSocialProfile): Future[UserProfile] = {
  // To be done
  Future(new UserProfile(-1, ""))
}

或者,您可能需要一个特殊的UserProfile单例用于此目的:

object FakeUserProfile extends UserProfile(-1, "")

def save[A <: AuthInfo](profile: CommonSocialProfile): Future[UserProfile] = {
  // To be done
  Future(FakeUserProfile)
}