matching List in any order when mocking method behavior with Mockito(使用 Mockito 模拟方法行为时以任何顺序匹配列表)
问题描述
我有一个使用 Mockito 的测试,它有一个非常奇怪的行为:它在调试中工作,但在正常运行时失败.经过一番调查,我意识到这是因为我在模拟方法行为,传递要匹配的元素列表.但由于某种原因,列表中的顺序并不总是相同,因此它不匹配,并且我希望我的模拟返回的内容没有返回,因为 2 个列表不是等于"
I have a test using Mockito that has a very strange behavior : it works in debug but fails when running normally. After some investigation, I realized it's because I am mocking methods behavior, passing a list of elements to match. But for some reason, order in the list is not always the same so it doesn't match and what I expect my mock to return is not returned, because the 2 lists are not "equals"
when(mockStatusCalculatorService.calculateStatus(Arrays.asList(IN_PROGRESS, ABANDONNED,EXPIRED))).thenReturn(ConsolidatedStatus.EXPIRED);
就我而言,要匹配的元素顺序无关紧要.那么在配置我的模拟时如何指定这个?
In my case, order of elements to match doesn't matter. So how can I specify this when configuring my mock ?
推荐答案
这是一个单行.使用 Hamcrest containsInAnyOrder
匹配器.
This is a one-liner. Use the Hamcrest containsInAnyOrder
matcher.
when(myMock.myMethod(argThat(containsInAnyOrder(IN_PROGRESS, ABANDONED, EXPIRED))))
.thenReturn(myValue);
这篇关于使用 Mockito 模拟方法行为时以任何顺序匹配列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 Mockito 模拟方法行为时以任何顺序匹配列表


基础教程推荐
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13