在Scala中使用异常和Mockito测试的抽象类

时间:2016-10-07 12:11:44

标签: scala unit-testing mockito scalatest

我有一个类似的抽象类:

abstract class ReadOnlyJsonFormat[T] extends RootJsonFormat[T] {
  final def write(obj: T): JsValue = throw DeserializationException("Unsupported operation")
}

这个想法很简单:我的子类实现了一个只读的JSON,我并不关心将任何对象写入JSON。

现在我想使用Mockito通过模拟测试这样的类,我可以调用实现的方法,以下工作:

"My nice test" should "raise an exception" in {
  val readOnlyJsonFormat = mock[ReadOnlyJsonFormat[Int]]
  intercept[DeserializationException] {when(readOnlyJsonFormat.write(1)).thenCallRealMethod()}

  val exc = intercept[DeserializationException] {
    readOnlyJsonFormat.write(1)
  }

  exc.getMessage must be ("Unsupported operation")
}

但由于我的方法在.write()时抛出异常,因此在定义模拟的行为时,我被迫拦截此类异常,这在Java中是不必要的。我是以错误的方式使用Mockito吗?我尝试使用ScalaMock,但我还没有找到一种方法来调用真正的方法。

0 个答案:

没有答案