我有一个实现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,但它也没有提供测试名称。
答案 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()
为您提供方法名称。