'How to test a Try[T] with ScalaTest correctly?

I have a method that returns a Try object:

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

I now want to test this with ScalaTest. Currently I am doing it like this:

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

However checking for isSuccess to be true looks a bit clumsy because for Options and Sequences there are things like should be(empty) and shouldNot be(empty). I cannot find anything like should be(successful).

Does this exist or is my approach really the way to go?



Solution 1:[1]

Another possibility is to do

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

This will give a message indicating the Try was not a success, instead of throwing the exception in maybeRes.get.

The analog exist for Option, Either and PartialFunction (using the relevant import)

Solution 2:[2]

Just check to see that it is the success type with your return value:

maybeRes shouldBe Success("moo")

Solution 3:[3]

Alternatively

import org.scalatest.TryValues._

// ... 

maybeRes.success.value should be "moo"

Solution 4:[4]

I cannot find anything like should be(successful).

maybeRes must be a 'success

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Cyrille Corpet
Solution 2 Matt Fowler
Solution 3 Gabriele Petronella
Solution 4 Laurent