2016-06-14 53 views
0

使用SoftAssert我有執行下列測試用例每個測試用例:如何打印故障的數量TestNG中

@Test 
public void testNumber() { 
    SoftAssert softAssert = new SoftAssert(); 
    List<Integer> nums = Arrays.asList(1,2,3,4,5,6,7,8,9,10); 
    for (Integer num : nums){ 
     softAssert.assertTrue(num%2==0, String.format("\n Old num : %d", num); 
    } 
    softAssert.assertAll(); 
} 

以上測試就會失敗號1,3,5,7, 9 五個陳述將被打印在測試報告中。

如果我運行一個更大的數據集的測試,我發現很難獲得測試數據失敗的測試數據。

有沒有更簡單的方法來獲取使用softAssert本身的測試用例失敗的測試數據的數量?

回答

0

簡單的方法可以找到失敗了SoftAssert本身的測試用例的測試數據。

或者您可以考慮擴展斷言類。以下是測試數據失敗的示例,該測試數據在測試用例中失敗並在新行中打印每個失敗。

package yourpackage; 

import java.util.Map; 

import org.testng.asserts.Assertion; 
import org.testng.asserts.IAssert; 
import org.testng.collections.Maps; 

public class AssertionExtn extends Assertion { 

private final Map<AssertionError, IAssert> m_errors; 

public AssertionExtn(){ 
    this.m_errors = Maps.newLinkedHashMap(); 
} 

protected void doAssert(IAssert a) { 
    onBeforeAssert(a); 
    try { 
     a.doAssert(); 
     onAssertSuccess(a); 
    } catch (AssertionError ex) { 
     onAssertFailure(a, ex); 
     this.m_errors.put(ex, a); 
    } finally { 
     onAfterAssert(a); 
    } 
} 

public void assertAll() { 
    if (!(this.m_errors.isEmpty())) { 
     StringBuilder sb = new StringBuilder("Total assertion failed: "+m_errors.size()); 
     sb.append("\n\t"); 
     sb.append("The following asserts failed:"); 
     boolean first = true; 
     for (Map.Entry ae : this.m_errors.entrySet()) { 
      if (first) 
       first = false; 
      else { 
       sb.append(","); 
      } 
      sb.append("\n\t"); 
      sb.append(((AssertionError)ae.getKey()).getMessage()); 
     } 
     throw new AssertionError(sb.toString()); 
    } 
} 
} 

您可以使用此爲:

@Test 
    public void test() 
    { 
     AssertionExtn asert=new AssertionExtn(); 
     asert.assertEquals(false, true,"failed"); 
     asert.assertEquals(false, false,"passed"); 
     asert.assertEquals(0, 1,"brokedown"); 
     asert.assertAll(); 
    }