2016-06-14 72 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(); 
    }