2015-11-08 62 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)