在使用Mockito模拟方法行为时以任何顺序匹配List [英] matching List in any order when mocking method behavior with Mockito

查看:117
本文介绍了在使用Mockito模拟方法行为时以任何顺序匹配List的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用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 matcher。

This is a one-liner. Use the Hamcrest containsInAnyOrder matcher.

when(myMock.myMethod(argThat(containsInAnyOrder(IN_PROGRESS, ABANDONED, EXPIRED))))
    .thenReturn(myValue);

这篇关于在使用Mockito模拟方法行为时以任何顺序匹配List的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆