0

我有一个实现 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,但它也没有提供测试名称。

4

3 回答 3

2

使用监听器来配置测试对我来说听起来是错误的——这就是 @Before* 注释的用途。

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

TestNG 注释的所有“魔法”都记录在这里:TestNG 依赖注入

高温高压

/詹斯

于 2013-02-18T08:52:55.217 回答
1
import java.lang.reflect.Method;

public class TestToGetMethodName
{ 

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

}
于 2014-02-19T17:48:36.033 回答
0

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

method.getTestMethod.getMethodName()给你方法名。

于 2014-02-20T18:09:42.537 回答