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

rab*_*ens 6 scala scalatest

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

def doSomething(p: SomeParam): Try[Something] = {
  // code
}
Run Code Online (Sandbox Code Playgroud)

我现在想用ScalaTest测试它.目前我这样做:

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

但是检查isSuccess是true因为选项和序列有类似的东西看起来有点笨拙should be(empty)和shouldNot be(empty).我找不到类似的东西should be(successful).

这是存在还是我的方法真的要走了?

Cyr*_*pet 15

另一种可能性是做

import org.scalatest.TryValues._
maybeRes.success.value.bar shouldBe "moo"
Run Code Online (Sandbox Code Playgroud)

这将显示一条消息,指示Try不成功,而不是抛出异常maybeRes.get.

模拟存在Option,Either和PartialFunction(使用相关导入)

  • `maybeRes.failure.exception 应该有消息“/ by 0”`,请参阅 [scaladoc](http://doc.scalatest.org/3.0.0/index.html#org.scalatest.TryValues) (2认同)

Mat*_*ler 10

只需检查它是否为具有返回值的成功类型:

maybeRes shouldBe Success("moo")
Run Code Online (Sandbox Code Playgroud)