Mockito 2在任何(类)方法中更改



我已经从1.9版中更新为Mockito 2.1。

现在我的一些测试失败了。any(Bla.class)方法似乎有所改变。在此测试之前:

when(criteriaBuilder.greaterThanOrEqualTo(any(Expression.class),
     any(Comparable.class)))
    .thenReturn(predicate);

现在表达式 any(Expression.class)为null。

我是否需要使用另一种方法使其再次起作用?我让它与(Expression)any()一起工作,但这对我来说并不正确。

丢弃Expression.class并无参数调用any

when(criteriaBuilder.greaterThanOrEqualTo(any(), any()))
    .thenReturn(predicate);

从Mockito 2开始,any(T.class)改变了含义:在此之前,它的意思是"包括Null在内的任何参考,将其铸造为T类型,以避免在Java 7和以前的ParkliciT中",它更改为读取"类T的任何实例"。:因此,any(Foo.class)将在从1.x升级到2.x时停止匹配null

没有参数的any()仍然表示"包括null在内的任何参考",在1.x至2.x之间保持一致,因此调用(Expression) any()ArgumentMatchers.<Expression>any()可以恢复所需的行为。由于Java 8中有改进的通用类型推理规则,您也可以调用any()并让Java推断该类型。

顺便说一句,不必担心诸如any返回null之类的表达式:这就是Mockito Matchers的工作方式。单独的堆栈跟踪"如何匹配此参数",而不是返回"特殊实例"或"特殊值";这是必要的,因为Java足够强大,以至于gt(5)返回的int中无法编码"大于5"的想法。0null是安全的默认值,因此Mockito在将anygt(5)的概念存储在堆栈上的相应位置中。

NullPoInterException可能来自接收null的代码(固定呼叫的默认值),该代码期望接收predicate

相关内容

  • 没有找到相关文章

最新更新