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