我遇到了这样一种情况,我正在通过 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/