如何正确测试ScalaTest的Try [T]?

时间:2017-05-22 12:18:15

标签: scala scalatest

我有一个返回Try对象的方法:

def doSomething(p: SomeParam): Try[Something] = {
  // code
}

我现在想用ScalaTest进行测试。目前我这样做:

"My try method" should "succeed" in {
  val maybeRes = doSomething(SomeParam("foo"))
  maybeRes.isSuccess shouldBe true
  val res = maybeRes.get
  res.bar shouldBe "moo"
}

然而,检查isSuccesstrue看起来有点笨拙,因为对于选项和序列,有should be(empty)shouldNot be(empty)之类的内容。我找不到像should be(successful)这样的内容。

这是否存在或者我的方法真的要走了?

3 个答案:

答案 0 :(得分:12)

另一种可能性是

import org.scalatest.TryValues._
maybeRes.success.value.bar shouldBe "moo"

这会显示一条消息,指出Try未成功,而不是在maybeRes.get中抛出异常。

适用于OptionEitherPartialFunction的类似物(使用相关导入)

答案 1 :(得分:9)

只需检查一下您的返回值是否为成功类型:

maybeRes shouldBe Success("moo")

答案 2 :(得分:1)

可选地

import org.scalatest.TryValues._

// ... 

maybeRes.success.value should be "moo"