2013-09-26 48 views
0

比方說,我有一個嘲笑特質富:specs2:有沒有辦法在使用Mockito的同時使用doNothing?

​​

,我嘲笑使用

val mockedFoo = mock[Foo] 

我想方法同前拋出一個異常我第二次調用它,例如這個接口

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

Unit返回類型使事情有點棘手,因爲你不能只是鏈:

returns "foo" thenThrows new RuntimeException 

但是如果你使用answers像下面你仍然可以解決這個問題:

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

見如果這對你有用。

+0

是的,似乎工作。非常感謝! – Emre

相關問題