如何在我的测试中获得在另一个类范围内发生的故障?

时间:2017-02-18 18:27:16

标签: scala playframework scalatest json4s scalacheck

我的服务中有一个函数,它接受一些jvalue数据,提取它并返回一些模型。

def getInstanceOf(data: JValue, aType: String): Living = aType match {
    case "person" => data.extract[Person]
    case "animal" => data.extract[Animal]
}

在我的测试中我想用坏数据调用这个函数,看看提取失败了。所以我试过了:

val res = myService.getInstanceOf(badData, "person")

res shouldBe a[MappingException]

并且它不起作用,因为在我的测试类中我正在注入服务并使用服务功能,因此在服务中发生故障并且我没有收到错误。我甚至没有到达res shouldBe a[MappingException],当我调用该函数时它失败了。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用thrownBy存储例外:

val res = the [MappingException] thrownBy myService.getInstanceOf(badData, "person")

或直接检查:

a [MappingException] should be thrownBy myService.getInstanceOf(badData, "person")

有关详细信息,请参阅documentation

答案 1 :(得分:0)

以下应该有效

import scala.util.{Failure, Try}
val Failure(th) = Try(myService.getInstanceOf(badData, "person"))
res shouldBe a[MappingException]