'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 | 
