2016-04-18 3 views
0

Принимая ниже и помещая их в TestNG Listener. Я мог найти эквивалент @BeforeClass как onBeforeClass(ITestClass, IMethodInstance). Однако, что эквивалентно для @AfterMethod?Методы испытаний TestNG BeforeClass и AfterMethod для слушателя TestNG

Моя цель - передать ITestResult в качестве параметра для этого метода, потому что я буду держать в нем результат теста. В приведенном ниже коде показано, что я получаю аннотацию и статус теста, а затем нажимаю его на облако testrail. Я попытался с помощью:

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

Это не помогло, и дал

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

Здесь Java: 1670 является

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"); 
}** 

После каждого метода выполняется, то, может быть, статус (PASS/FAIL/SKIP), я хочу выполнить этот getStatus AndAnnotation ...(), но он дает выше исключения/ошибки.

ответ

1

Я думаю, что вы можете реализовать org.testng.ITestListener, но вместо одного метода afterInvocation() имеет несколько в зависимости от результата: onTestSuccess(), onTestFailure(), onTestSkipped() и т.д. Каждый метод передается ITestResult объект, который также содержит метод выполняется:

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

+0

Я использовал метод Method = result.getMethod(). GetConstructorOrMethod(). GetMethod(); " и это сработало для меня. Благодаря! –