gpt4 book ai didi

java - Mockito anyMapOf 嵌套泛型

转载 作者:搜寻专家 更新时间:2023-10-30 21:03:20 24 4
gpt4 key购买 nike

我正在尝试验证是否调用了具有以下签名的方法:

public void process(Map<String, Set<String>> data) {
...
}

嵌套的参数化 Set 给我带来了困难。我可以像这样使用 any() 匹配器正确验证它:

verify(dataProcessor).process(Matchers.<Map<String, Set<String>>> any());

Mockito: Verifying with generic parameters 中所述尽管令人讨厌的是,如果我直接静态导入 Matchers.any 并将其称为:

verify(dataProcessor).process(<Map<String, Set<String>>> any())

但是在这种情况下,anyMapOf(clazz, clazz) 似乎是更合适的匹配器。因为你不能做 Set.class 我不确定你会怎么做。由于缺乏通用性,以下内容不起作用:

verify(dataProcessor).process(anyMapOf(String.class, Set.class));

是否可以使用 anyMapOf 验证这种情况,还是我应该坚持使用 Matchers.<>any()?

最佳答案

没有办法使用 anyMapOf 来做到这一点。它旨在帮助解决将简单类映射到 Java 7 中的简单类的简单情况,,而您的情况比这更复杂。

改进了 Java 8 参数推断,因此在 Java 8 中,您可以只使用 any()

verify(dataProcessor).process(Matchers.any());

除此之外,制作这种外观的最佳方式要么像您上面写的那样:

verify(dataProcessor).process(Matchers.<Map<String, Set<String>>>any());

或者通过将匹配器提取到静态函数,这为 Java 提供了足够的信息来自行推断类型:

@Test public void yourTest() {
// ...
verify(dataProcessor).process(anyStringSetMap());
}

private static Map<String, Set<String>> anyStringSetMap() {
return any();
}

(注意:注意 anyStringSetMap() 的返回值是 null;它是 side-effect of calling any that you're looking for 。提取的方法只是通知 Java 编译器预期的返回类型;请注意,做任何更有趣的事情可能会以非常有趣的方式中断。)

关于java - Mockito anyMapOf 嵌套泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21783219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com