Question

Let's say that I have a mocked trait Foo:

trait Foo {
  def op(x: String): Unit
}

and I mocked this interface using

val mockedFoo = mock[Foo]

I want the method op to throw an exception second time I call it, e.g.

import org.specs2.mock.Mockito
import org.specs2.mutable.Specification

trait Foo {
  def op(x: String): Unit
}

class DummySpec extends Specification with Mockito {
  "dummy" should {
    "test" in {
      val mockedFoo = mock[Foo]

      org.mockito.Mockito.doNothing().doThrow(new RuntimeException).when(mockedFoo).op(any[String])

      mockedFoo.op("This one should work fine") should not(throwAn[Exception])

      mockedFoo.op("This one should throw an exception") should throwAn[Exception]
    }
  }
}

Is there a way to do this in specs2 style? e.g.

mockedFoo.op(any[String]) returns Unit thenThrows new RuntimeException

but this doesn't compile.

Thanks!

Was it helpful?

Solution

The Unit return type makes things a bit trickier as you can't just chain:

returns "foo" thenThrows new RuntimeException

But you can still solve this problem if you use answers like below:

mockedFoo.op(anyString) answers {args => } thenThrows new RuntimeException

See if this works for you.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top