java 单元测试中的Groovy mock方法忽略List中元素的顺序

km0tfn4u  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(107)

我想在我的单元测试中设置一个模拟类方法的期望。我想模拟的方法将元素列表作为输入参数。如何设置期望,以便在调用mock时忽略列表中元素的顺序?
例如:
mockClass方法签名

String foo(List<String> list)

我目前是这样设定期望的

List<String> list = new ArrayList<>();
list.add{"a"}
list.add{"b"}
list.add{"c"}
and:
    mockClass.foo(list) >> "test"

此测试间歇性地失败,因为在测试期间调用方法时,列表中元素的顺序不同。

yhuiod9q

yhuiod9q1#

argThat闭包可用于定义一个自定义参数匹配器,该匹配器忽略列表中元素的顺序。
例如:

when:
        def result = mockClass.foo(argThat { it.sort() == ["a", "b", "c"].sort() })


then:
   //somecode

where:
    argThat = { Closure<Boolean> closure ->
        { closure(it) } as org.hamcrest.Matcher
    }

相关问题