2016-05-14 104 views
1

我正在使用Selenium,Java和TestNG编写测试。有时我在单元测试中使用了许多软断言,当他们失败时,TestNG记者没有显示他们发生的代码行。有什么办法可以让它显示出来吗?实际上,当我在报告上单击Failure Exception它需要我s_assert.assertAll();但我需要采取具体的线路,如:s_assert.assertEquals(Alert_text, "Hi.. is alert message!", "Alert Is InCorrect");如何使TestNG报告显示软断言失败的行

+0

我认为,你不应该以这种方式“放弃”你的工作(这是一种非常糟糕的风格),而是要创造一个好的信息。如果你的断言真的太枯燥,并且类似于编写合理的消息,在方法开始时创建一个Integer dullAssertNum,并将“assert”+(dullAssertNum ++).toString包括到每个无效断言中。 – Gangnus

+0

你会问为什么这是一种不好的风格?因为只有在一种测试方法中有许多行时,才需要指出行号。只有在生成文件的情况下,它才是不错的风格。在生成的文件中,您可以生成行号并将其插入到消息中。 – Gangnus

回答

0

以下实现自定义软断言(我把它命名为检验器)应该做的你在问什么。

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

import java.util.Arrays; 
import java.util.Map; 

public class SoftAssertExample { 
    private Verifier verifier = new Verifier(); 

    @Test 
    public void testMethod() { 
     verifier.assertEquals(false, true); 
     verifier.assertTrue(true); 
     verifier.assertAll(); 
    } 

    /** 
    * A simple soft assertion mechanism that also captures the stacktrace to help pin point the source 
    * of failure. 
    */ 
    public static class Verifier extends Assertion { 
     private final Map<AssertionError, IAssert<?>> m_errors = Maps.newLinkedHashMap(); 

     @Override 
     protected void doAssert(IAssert<?> a) { 
      onBeforeAssert(a); 
      try { 
       a.doAssert(); 
       onAssertSuccess(a); 
      } catch (AssertionError ex) { 
       onAssertFailure(a, ex); 
       m_errors.put(ex, a); 
      } finally { 
       onAfterAssert(a); 
      } 
     } 

     public void assertAll() { 
      if (! m_errors.isEmpty()) { 
       StringBuilder sb = new StringBuilder("The following asserts failed:"); 
       boolean first = true; 
       for (Map.Entry<AssertionError, IAssert<?>> ae : m_errors.entrySet()) { 
        if (first) { 
         first = false; 
        } else { 
         sb.append(","); 
        } 
        sb.append("\n\t"); 
        sb.append(ae.getKey().getMessage()); 
        sb.append("\nStack Trace :"); 
        sb.append(Arrays.toString(ae.getKey().getStackTrace()).replaceAll(",", "\n")); 
       } 
       throw new AssertionError(sb.toString()); 
      } 
     } 
    } 
} 
0

示例代码: s_assert.assertEquals(Alert_text, “嗨..是警报消息!”, “警报InCorrect1”); (Alert_text,“Hi .. is alert message!”,“Alert Is InCorrect2”); s_assert.assertEquals (Alert_text,“Hi .. is alert message!”,“Alert is InCorrect3”); s_assert.assertEquals (Alert_text,“Hi .. is alert message!”,“Alert is InCorrect4”); s_assert.assertEquals s_assert.assertall();

执行失败它指向(s_assert.assertall();)线后,平均一次显示了软断言失败.... 警报InCorrect2 警报InCorrect3

请检查输出消息。

+0

它是否显示失败软声明的行数? –

+0

它显示哪个软断言失败,其消息“Alert Is InCorrect2”; –