java - 确定两个列表相等而不关心订购 Mockito

标签 java mockito matcher

我遇到了这样一种情况,我正在通过 when-then 来匹配列表,但由于排序问题,我大多数时候都会出错。

List<String> myListToMatch = new ArrayList<String>();
myListToMatch .add("1");
myListToMatch .add("2");
when(obj.methodName(eq(myListToMatch))).thenReturn("someStringValue");

由于在被调用方法中的排序,列表为 ["2","1"],根据上述影响我的测试用例的 stub ,它没有返回“someStringValue”。任何帮助表示赞赏。我正在使用 Mockito 库。我没有任何 hamcrest 依赖(不想添加任何)。

我尝试在代码中排序并且它有效,但如果有方法或某种参数匹配器我可以在 when-then stub 中使用,我不想更新我的代码。

最佳答案

首先,如果您不关心元素的顺序,您可以选择 Set。或者,您也可以按照以下 answer 中给出的实现进行操作这与您的问题陈述非常吻合。

如果您使用的是 Java 8 和更新版本的 Mockito,您可以编写以下代码。它取自 here

when(
   mock.method(argThat(t -> t.containsAll(Arrays.asList("1","2"))))
).thenReturn(myValue);

如果这回答了您的问题,请告诉我。

关于java - 确定两个列表相等而不关心订购 Mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56652432/

相关文章:

java - 理解 java hashmap 和设置对象的值

java - 通用可调用

java - java字符串替换效率

Java 正则表达式模式和匹配器

java - NoSuchMethodError : com. google.common.cache.CacheBuilder.maximumSize(J)

java - JBoss CLI - 通过模式匹配取消部署

java - 莫基托。我试图模拟的依赖项是 NULL

java - 使用 Mockito,如何 stub 返回类型为 void 的方法,该方法在传递某个参数时抛出异常?

java - AspectJ 的 JUnit 测试

java - 在 Java 中使用正则表达式(一些特定字符)