2017-02-22 78 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

非常感谢......我当然应该计算成功而不是失败...... –