specs2:有没有办法在与Mockito嘲笑时使用doNothing?

时间:2013-09-26 09:54:03

标签: unit-testing scala specs2

让我们说我有一个嘲弄的特质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风格中执行此操作? e.g。

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

但这不会编译。

谢谢!

1 个答案:

答案 0 :(得分:4)

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

returns "foo" thenThrows new RuntimeException

但是,如果您使用下面的answers,您仍然可以解决此问题:

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

看看这是否适合你。