2015-11-08 43 views
-1

我正在运行测试,以查看我输入到文件中的值是否与我从API生成的值相同。所以我有从我的API生成的实际值,我有另一个期望值列表。我遇到的问题是我无法将苹果与苹果进行比较。如何比较foreach循环内的哈希集迭代通过另一个哈希集Java

例子:

Actual = {red, bleu, yellow, purple} 
expected = {bleu, red, purple, yellow} 

failure: red != bleu, bleu != red, yellow != purple, purple != yellow 

我不知道怎么回事,以更好地描述我在说什么比你展示我的代码等。

这里是我的代码:

TreeSet<String> hashSet = (TreeSet<String>) calcGraph.getInputs(); 
boolean success = true; 
String error=""; 

for(String xpath : hashSet) { 

    String actual = someApi(response, expression, xpath); 

    for (String values : data.getDataOutputs().keySet()) { 
     String expected = data.getDataOutputs().get(expectedXpath); 

     if (!expected.equals(actual)) { 
      error+= "\nExpected : " + expected +"\nActual: " +actual+"\n"; 
      success = false; 
     } if (!success) Assert.fail(error); 

    } 
} 

我如何比较1个foreach循环或等效内这些列表?任何帮助或援助将不胜感激。

编辑:

  Iterator<String> expectation = expectedList.iterator(); 
      Iterator<String> actuation = actualList.iterator(); 

      while((expectation.hasNext()) && (actuation.hasNext())) { 

       String exp = expectation.next(); 
       String act = actuation.next(); 

       logger.info("Expected: "+exp); 
       logger.info("Actual: "+act); 

       // Validation check 
       if (!exp.equals(act)) { 
        error+= "\nExpected : " + exp +"\nActual: " +act+"\n"; 
        success = false; 
       } if (!success) Assert.fail(error); 
      } 

秩序的事情,因此这将失败...

+0

的for-each不适合这个工作的人。你需要一个普通的for循环。 –

+1

我没有在这里看到任何列表。我看到一个'hashSet'变量(这意味着一个'HashSet')和一个'Map'('data.getExplanationOutputs()')。你想比较哪个列表? – Eran

+0

你想使用assertj;它有这样的情况下的断言('assertThat(list1).containsExactlyElementsOf(list2)')。 – fge

回答

0

这个问题太奇怪了。在标题中你说HashSetHashSet比较,并且在内容中你使用的是TreeSet

从这个问题看来,您似乎有一个Set的实际结果,并且您想要与预期结果的Set进行比较,无论迭代顺序如何,我是对吧?

使用contains肯定是错误的,以及使用迭代器做比较。

解决方案实际上很简单。从Set的Javadoc:

布尔等于(对象O)

比较与此set的相等指定的对象。如果指定的对象也是一个集合,则这两个集合具有相同的大小,并且指定集合中的每个成员都包含在此集合中 (或等同地,此集合中的每个成员包含在指定集合中的 中),则返回true )。该定义确保在设置接口的不同实现中,equals方法正确工作 。

您需要做的仅仅是

expectedResultSet.equals(actaulResultSet)