2014-06-05 62 views
0

我正在嘗試使用testNG執行一些測試。該測試方法接受來自dataProviderClass的對象。我想在測試運行時打印對象的名稱。我使用了ItestListenrs,但這只是打印測試函數的名稱而不是其中的Object。如何在testNG中自定義合格/失敗測試報告

SampleTest.java:

package com.abc; 

import org.testng.annotations.Listeners; 
import org.testng.annotations.Test; 
@Listeners({ com.mindtree.MyListener.class}) 
public class SampleTest { 

    @Test(dataProviderClass = templateObject.class) 
    public void SampleTest() throws Exception{ 
     //do some assertion on Object values; 
    } 
    } 

MyListener.java:

package com.abc; 

import org.testng.ITestResult; 
import org.testng.TestListenerAdapter; 

public class MyListener extends TestListenerAdapter { 

    private int m_count = 0; 

     @Override 
     public void onTestFailure(ITestResult tr) { 
     log("Fail"); 
     } 

     @Override 
     public void onTestSkipped(ITestResult tr) { 
     log("Skipped"); 
     } 

     @Override 
     public void onTestSuccess(ITestResult tr) { 
     String className = tr.getMethod().getTestClass().getName(); 
     System.out.println(className); 
     ## WANT TO PRINT HERE THE TESTCASE OBJECT NAME 
     } 

     private void log(String string) { 
     System.out.print(string); 
     if (++m_count % 40 == 0) { 
      System.out.println(""); 
     } 
     } 
} 

所以目前輸出來像通過:SampleTest 但我想輸出到像PASSED :SampleTest_Object.getStringName()。

回答

0

試試這個:

public class MyListener extends TestListenerAdapter { 

    @Override 
    public void onTestSuccess(ITestResult r) { 
      // Step 1: Find which iteration it is and subtract by 1 to get index 
     int cnt = r.getMethod().getCurrentInvocationCount() -1 ; 

      // Step 2: Get the data provider class instance 
     Class dpc = r.getMethod().getConstructorOrMethod().getMethod().getAnnotation(org.testng.annotations.Test.class).dataProviderClass(); 
      // Step 3: Get the data provider name, which will be method name in dataprovider class. 
     String dp = r.getMethod().getConstructorOrMethod().getMethod().getAnnotation(org.testng.annotations.Test.class).dataProvider(); 
      // Step 4: Now call the method (it is static method) to get all the objects 
     try { 
      Object[][] data = (Object[][]) dpc.getMethod(dp, null).invoke(null); 
        // Step 5: You have data and index... reach out to the data with which your test was run. 
      System.out.println("Successfully got the data"); 
      for (Object o: data[cnt]) { 
       System.out.println(" " + o); 
      } 
     } catch (IllegalAccessException | IllegalArgumentException 
       | InvocationTargetException | NoSuchMethodException 
       | SecurityException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 
相關問題