如何在@DataProvider方法中检索@Test方法参数?

时间:2015-05-26 07:36:30

标签: testing parameters testng test-data testng-dataprovider

我想在DataProvider方法中检索Test方法的参数名称。 通过在DataProvider中使用method.getParameterTypes(),我可以获得在Test方法中传递的param类,但我想要名称。

@Test
public void TC_001(String userName, String passWord){
//code goes here
}

@DataProvider
public Object[][] testData(Method method){
//Here I want to get names of param of test method i.e. userName and passWord
}

这是必需的,因为使用这些名称我可以从我的Excel文件中获取数据

1 个答案:

答案 0 :(得分:0)

您可以使用反射从方法中获取参数以获取参数名称。

@DataProvider
public Object[][] testData(Method method){
    String arg0 = method.getParameters()[0].getName();
    // should be "userName" in your example test case
}

请注意,必须使用-g:vars编译类,以在调试信息中包含参数名称。否则,参数名称将被命名为arg0arg1,...这似乎是OpenJDK 8,这是默认值。

为了减少对这一事实的依赖并避免可能的名称混淆/冲突,我使用指定参数名称的(自定义)注释:

定义注释:

@Retention(RUNTIME)
@Target(PARAMETER)
public @interface ParamName {
    public String value();
}

使用它:

public void TC_001(@ParamName("username") String userName, String passWord) { ... }

访问名称:

Parameter parameter = method.getParameters()[0];
ParamName parameterNameAnn = parameter[0].getAnnotation(ParamName.class);
String parameterName;

if (parameterNameAnn != null) {
    // get the annotated name
    parameterName = parameterNameAnn.value();
} else {
    // annotation missing, resort to the "reflected" name
    parameterName = parameter.getName();
}

另见