0

假设我有一个模拟特征 Foo:

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

我用这个模拟了这个界面

val mockedFoo = mock[Foo]

我希望方法 op 在我第二次调用它时抛出异常,例如

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]
    }
  }
}

有没有办法以 specs2 风格做到这一点?例如

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

但这不会编译。

谢谢!

4

1 回答 1

4

返回类型使事情变得有点棘手,Unit因为您不能只是链接:

returns "foo" thenThrows new RuntimeException

但是如果你answers像下面这样使用,你仍然可以解决这个问题:

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

看看这是否适合你。

于 2013-09-26T12:30:06.887 回答