2017-02-22 89 views
0

我檢查一個字符串列表包含滿足特定條件的具體數字,特別是它們包含一個子字符串,忽略大小寫。AssertJ結果反饋與「迭代斷言」

所以我想出了這個(原因failedResults領域將變得明顯):

class ContainsIgnoringCase extends Condition<CharSequence> { 
     private String lCString; 
     private int failedResults = 0; 
     int getFailedResults(){ 
      return failedResults; 
     } 

     ContainsIgnoringCase(String string){ 
      lCString = string.toLowerCase(); 
     } 

     @Override 
     public boolean matches(CharSequence value) { 
      boolean result = value.toString().toLowerCase().contains(lCString); 
      if(! result){ 
       failedResults++; 
      } 
      return result; 
     } 
    } 

如果失敗,則:

assertThat(paramsPassed).haveExactly(7, new ContainsIgnoringCase("documents")); 

它打印出的List<String> paramsPassed,但它不」說實際的失敗次數。

我認爲這有可能會做的伎倆,但它並不:

ContainsIgnoringCase cic = new ContainsIgnoringCase("documents"); 
    assertThat(paramsPassed).as("failed: " + cic.getFailedResults()).haveExactly(7, new ContainsIgnoringCase("documents")); 

...這只是打印「失敗0」,如此明顯的測試進行之前的方法getFailedResults()被稱爲。在AssertJ的內部某處,這個失敗數字必須被計算出來......是否有任何方式將它打印出來供用戶使用?

回答

1

添加toString,以你的條件是這樣一個例子:給定paramsPassed = list("documents", "2");

@Override 
    public String toString() { 
     return "elements containing '" + this.lCString + "' but it failed for " + getFailedResults(); 
    } 

它會給如下錯誤:

Expecting elements: 
<["documents", "2"]> 
to have exactly 7 times <elements containing 'documents' but failed = 1> 
+0

非常感謝......我當然應該計算成功而不是失敗...... –