如何在specs2的eventually中使用Mockito的verify方法?
解决specs2异步验证中无需添加
success的方法 问题根源
specs2的eventually方法要求传入的代码块返回org.specs2.execute.Result类型,但原生Mockito的verify(barMock).bar()返回的是Unit,类型不兼容,所以必须通过success来补全符合要求的返回值。
无需success的解决方案
利用specs2与Mockito集成的DSL,使用specs2风格的验证语句——这类语句本身就会返回Result类型,可直接放入eventually中,完全不需要额外添加success:
import org.specs2.mutable.Specification import org.specs2.mock.Mockito class AsyncFunctionSpec extends Specification with Mockito { "Async function foo" should { "invoke barMock.bar()" in { val barMock = mock[Bar] foo() // 执行异步函数 eventually { there was one(barMock).bar() // 直接写验证逻辑,无需success } } } }
原生Mockito的替代写法(仍需返回Result,但更简洁)
如果坚持用原生Mockito的verify语法,也可以用更简洁的ok替代success,本质都是返回一个成功的Result实例:
eventually { verify(barMock).bar() ok }
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

