这是在配置阶段获取TestNG侦听器中的测试方法名称的方法吗?

时间:2013-02-17 14:05:34

标签: selenium webdriver testng thucydides

我有一个实现IInvokedMethodListener的TestNG监听器。在@BeforeMethod上我需要设置一些测试上下文,这是示例:

public class ThucydidesInvokedMethodListener implements IInvokedMethodListener2 {

    public void beforeInvocation(final IInvokedMethod method, final ITestResult testResult) {

    boolean areBeforeMethods = method.getTestMethod().getTestClass().getBeforeTestMethods().length > 0;
    if ((areBeforeMethods && method.getTestMethod().getTestClass().getBeforeTestMethods()[0] == method.getTestMethod()) ||
            !areBeforeMethods && method.isTestMethod()) {

        final ThucydidesTestContext context = new ThucydidesTestContext(testResult);
        testResult.setAttribute(contextKey(), context);
        context.before();
    }
} 

但我还需要一个测试名称,该名称将在BeforeMethod之后执行,以便在报告中使用此测试名称。这可能使用TestNG吗? 此外,我已经尝试了另外具有ITestContext的IInvokedMethodListener2,但它也没有提供测试名称。

3 个答案:

答案 0 :(得分:2)

使用侦听器配置测试对我来说听起来不对 - 这就是@ Before *注释的用途。

我不知道如何通过监听器获取所需信息,但使用@BeforeMethod很简单:只需将java.reflect.Method类型的参数添加到方法签名中,TestNG将注入当前方法,即可然后询问它的名字和你想知道的其他一切。

此处记录了TestNG注释的所有“魔力”:TestNG dependency injection

HTH

/延

答案 1 :(得分:1)

import java.lang.reflect.Method;

public class TestToGetMethodName
{ 

    @BeforeMethod
    public void handleTestMethodName(Method method)
    {
        String testName = method.getName(); 
    }

}

答案 2 :(得分:0)

好吧,使用IInvokedMethodListener,beforeInvocation方法为您提供了IInvokedMethod方法。

method.getTestMethod.getMethodName()为您提供方法名称。