我已经从1.9版更新到Mockito 2.1。
现在我的一些测试失败了。方法似乎有所变化any(Bla.class)。在此测试还不错之前:
when(criteriaBuilder.greaterThanOrEqualTo(any(Expression.class),
any(Comparable.class)))
.thenReturn(predicate);
Run Code Online (Sandbox Code Playgroud)
现在表达式any(Expression.class)为空。
我是否需要使用另一种方法使其再次正常工作?我可以使用它,(Expression)any()但对我来说似乎不对。
删除不带参数的Expression.class和呼叫any:
when(criteriaBuilder.greaterThanOrEqualTo(any(), any()))
.thenReturn(predicate);
Run Code Online (Sandbox Code Playgroud)
从Mockito 2开始,any(T.class)更改了含义:在此之前,其含义是“任何引用,包括null,都必须转换为该类型T以避免在Java 7及更高版本中进行显式转换”,它改为读取“ class的任何实例T”:因此,any(Foo.class)将停止匹配null从1.x升级到2.x的过程中。
any()不带参数的含义仍然是“任何包含null的引用”,在1.x到2.x之间保持一致,因此调用(Expression) any()或ArgumentMatchers.<Expression>any()可以恢复所需的行为。由于Java 8中改进了通用类型推断规则,因此您也可以调用any()Java并推断类型。
不要担心像表达式any返回null,顺便说一句:这就是如何匹配器的Mockito工作。一个单独的堆栈跟踪“如何匹配此参数”,而不是返回“特殊实例”或“特殊值”;这是必要的,因为Java的是强类型的足够,有没有办法中的编码想法“大于5” int是gt(5)的回报。0和null是安全的默认值,因此Mockito在将概念any或存储gt(5)在堆栈中的相应位置时返回它们。
NullPointerException可能来自您null希望在其接收代码的地方(存根调用的默认值)predicate。
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |