如何使用 specs2 模拟一些方法只在第一次抛出异常然后什么都不做?
How to mock some methods only throw exception for the first time and then do nothing, with specs2?
在specs2中,我们可以mock一个方法让它抛出异常:
class Hello {
def say():Unit = println("Hello, world")
}
val hello = mock[Hello]
hello.say() throws new RuntimeException("something wrong")
但是如何让它第一次抛出,然后什么都不做呢?
这实际上是一个 mockito 问题,而不是 specs2 问题。
来自 mockito 文档:
when(mock.someMethod("some arg"))
.thenThrow(new RuntimeException())
.thenReturn("foo");
替代的、较短版本的连续存根:
when(mock.someMethod("some arg"))
.thenReturn("one", "two", "three");
doThrow(new RuntimeException("something wrong")).doNothing().when(hello).say()
在specs2中,我们可以mock一个方法让它抛出异常:
class Hello {
def say():Unit = println("Hello, world")
}
val hello = mock[Hello]
hello.say() throws new RuntimeException("something wrong")
但是如何让它第一次抛出,然后什么都不做呢?
这实际上是一个 mockito 问题,而不是 specs2 问题。 来自 mockito 文档:
when(mock.someMethod("some arg"))
.thenThrow(new RuntimeException())
.thenReturn("foo");
替代的、较短版本的连续存根:
when(mock.someMethod("some arg"))
.thenReturn("one", "two", "three");
doThrow(new RuntimeException("something wrong")).doNothing().when(hello).say()