Mockito anyListOf、anyMapOf、anyCollectionOf 已弃用替代品

Pul*_*lix 8 java deprecated mockito

我正在研究 Java 8 到 Java 17 的更新,该项目包括一个非常旧的 Mockito 版本。当我将库更新到 Mockito 4.4.0 时,我发现有很多库已被完全删除,其中大多数与对象验证相关,您可以在编译时设置变量类型,例如:如果您有以下对象:

Map<String,Object> map
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 Mokito 验证映射是否为 String、Object 类型:

anyMapOf(String.class,Object.class)
Run Code Online (Sandbox Code Playgroud)

这里的事情是,我认为这两者之一可能是一个很好的方法:

//Create the map first 
Map<String,Object> map = new HashMap<>();
//Then use the method "any" calling the getClass method 
any(map.getClass())
Run Code Online (Sandbox Code Playgroud)

但现在我很确定它不一样。另一方面,我找到了以下论坛: java generics: getting class of a class with genericparameters

我从中得到这段代码:

(Class<Map<String,Object>>)(Class)Map.class
Run Code Online (Sandbox Code Playgroud)

如果你将它与任何一起使用,这似乎也有效,如下所示:

any((Class<Map<String,Object>>)(Class)Map.class)
Run Code Online (Sandbox Code Playgroud)

但显然,它会触发警告消息,而且它似乎不是最好的解决方案。

最后,我在Mockito 文档中读到,这个类仅用于通用友好性,以避免在 Java 8 之前进行转换,所以这意味着如果我使用anyMap,它将与 anyMapOf 一样工作?

我花了几个小时寻找可能是这种已弃用方法的最佳替代品,但我就是找不到正确的答案。

Khr*_*kar 9

尝试这个:

ArgumentMatchers.<String,Object>anyMap()
Run Code Online (Sandbox Code Playgroud)

或这个:

Map<String,Object> mapToGoIntoTheMock = anyMap()
Run Code Online (Sandbox Code Playgroud)