2016-04-18 15 views
0

Nehmen Sie die folgenden base class methods testSetup() and getStatusAndAnnotation() und setzen Sie sie in TestNG Listener. Ich könnte das Äquivalent von @BeforeClass als onBeforeClass(ITestClass, IMethodInstance) finden. Wie lautet das Äquivalent für @AfterMethod?TestNG BeforeClass und AfterMethod äquivalente Methoden für TestNG Listener

Mein Ziel ist es, die ITestResult als Parameter an diese Methode zu übergeben, weil ich das Testergebnis in sie halten wird. Der folgende Code zeigt, dass ich die Anmerkung und den Status des Tests erhalte und ihn dann in die Testrail-Cloud schiebe. Ich habe versucht, mit:

@Override 
    public void afterInvocation(IInvokedMethod, ITestResult) { 
     .. 
    } 

Es hat nicht geholfen und gab

java.lang.NoSuchMethodException: client.test.reporting.listeners.TestRailListener.test_getVersion() 
    at java.lang.Class.getMethod(Class.java:1670) 

Hier Java: 1670 ist

throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes)); 

**@BeforeClass 
     public static void testSetup() throws InterruptedException, IOException, APIException { 
      initTestRail(); 
     } 
@AfterMethod 
public void getStatusAndAnnotation(ITestResult result) throws NoSuchMethodException, IOException, APIException { 
    HashMap<Object, Object> map = new HashMap<>(); 
    Method m = getClass().getMethod(result.getName()); 
    TestCase annotation = m.getAnnotation(TestCase.class); 
    try { 
     map.put("testRailCaseId",annotation.testRailCaseId()); 
    }catch (NullPointerException e){} 
    if (result.isSuccess()) { 
     map.put("result", 1); 
    } else { 
     map.put("result", 5); 
    } 
    if(annotation.testRailDeployEnable() && !map.get("testRailCaseId").equals(null) && !map.get("testRailCaseId").toString().isEmpty()) 
    { 
     TestRailIntegration.addTestResult(map); 
    } 
    else System.out.println("Deploying result was canceled, because test has annotation \"testRailDeployEnable: false\" or \"testRailCaseId\" has no value"); 
}** 

Nach jedem Verfahren ausgeführt wird, was vielleicht der Status (PASS/FAIL/SKIP), ich möchte diesen getStatus ausführen AndAnnotation ...() aber es gibt oben Ausnahme/Fehler.

Antwort

1

Ich glaube, Sie org.testng.ITestListener implementieren können, aber anstatt einzelne Methode afterInvocation() es mehrere hat auf das Ergebnis je: onTestSuccess(), onTestFailure(), onTestSkipped() usw. Jede Methode übergeben wird ITestResult Objekt, das auch Verfahren enthält ausgeführt wird:

@Override public void onTestSuccess(ITestResult iTestResult) { Method method = iTestResult.getMethod().getConstructorOrMethod().getMethod(); Annotation[] annotations = method.getDeclaredAnnotations(); ... }

+0

ich verwendet habe "Method method = result.getMethod() getConstructorOrMethod() getMethod();.." und das hat für mich funktioniert. Vielen Dank! –

Verwandte Themen