当前位置: 首页 > 知识库问答 >
问题:

在Spock框架中断言两个列表相等

鲜于雨石
2023-03-14
def expectedResults = [ ... ] //the list I expect to see
def isEqual = true;

when:
def realResults = getRealResultsMethod() //get real results in a list here
expectedResults.each {isEqual &= realResults.contains(it)}
then:
isEqual
0 * errorHandler.handleError(_) //by the way assert that my errorHandler is never called

更新

更准确地说。我想知道这两个列表是否有相同的对象,两个列表都没有额外的对象,顺序无关紧要。例如:

list=[1,5,8]

list1=[5,1,8]    
list2=[1,5,8,9]

println(list == list1) //should be equal, if we use == not equal    
println(list == list2) //should not be equal, if we use == not equal

共有1个答案

欧奇希
2023-03-14

只要做:

when:
    def expectedResults = [ ... ]
    def realResults = getRealResultsMethod()

then:
    realResults == expectedResults

或者,如果您不关心顺序(这违反了列表的约定,但您可以这样做),您可以:

then:
    realResults.sort() == expectedResults.sort()

或者把它们转换成集什么的

 类似资料:
  • 我有类,它只使用id属性定义equals。它还有另一个方法(称为“are同”),它检查给定参数是否具有与此对象属性相等的一些重要属性(并且它忽略id)。 在测试中,我想检查两个集合是否使用arame as“custom equals”方法相同(最好忽略顺序,不依赖hashCode,这显然与arame不一致)。 我想知道,是否有比写包装纸更简单的方法。写这样的东西会更愉快 Hamcrest示例在处理

  • 我找到了junit的解决方案,但需要TestNG的解决方案。还有比编写一个自己的for循环更有用的想法吗?

  • 我在Codewars.com参加培训测试, 说明是: 在此kata中,您必须在给定字符串的情况下,用字母在字母表中的位置替换每个字母。 如果文本中的任何内容不是字母,请忽略它,不要返回它。“A”=1,“B”=2. 我已经制作了这样的PHP脚本 但当我提交我的答案时,它包含的错误就像 请谁能帮忙修一下?告诉我为什么它显示错误的细节?

  • 我想检查两个列表(比方说,ArrayList)是否有完全相同的实例类,基于预期的列表。为此,我构建了下一个方法,但我想知道是否有另一种使用某些库的奇特方法,比如assertJ。 任何建议都是非常受欢迎的。谢谢