Search code examples
scalascalatest

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

  • 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)