2015-05-26 70 views
1

我想在DataProvider方法中檢索Test方法的參數名稱。 通過在DataProvider中使用method.getParameterTypes(),我可以得到在Test方法中傳遞的param類,但我想要名稱。如何檢索@DataProvider方法中的@Test方法參數?

@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文件中的數據

回答

0

您可以使用反射來從該方法得到的參數,以獲取參數的名稱。

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

注意的是,類必須與-g:vars被編譯到包括在調試信息的參數名稱。否則參數名稱被命名爲arg0,arg1,...看起來,使用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(); 
} 

參見