2016-05-14 7 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

Ниже реализация пользовательских Soft Assertion (я назвал его Verifier) ​​должны делать о чем вы просите.

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"); s_assert.assertEquals (Alert_text, «Привет .. это предупреждение!», «Alert Is InCorrect2»); s_assert.assertEquals (Alert_text, «Привет .. это предупреждение!», «Alert Is InCorrect3»); s_assert.assertEquals (Alert_text, «Привет .. это предупреждение!», «Alert Is InCorrect4»); s_assert.assertall();

после выполнения терпит неудачу он указывает (s_assert.assertall();) линии, среднее время он показывает сообщение, которое мягкая утверждают провалена .... оповещение InCorrect2 Оповещение InCorrect3

пожалуйста, проверьте вывод.

+0

показывает номер строки неудачных утверждений? –

+0

показывает, какое мягкое утверждение не удалось и его сообщение «Alert Is InCorrect2»; –