我正在使用TestNG并进行一系列测试。我想在每个需要有关方法信息的测试方法之前执行操作。举个简单的例子,假设我想在执行之前打印方法的名称。我可以编写一个用@BeforeMethod
注释的方法。如何将参数注入该方法?
答案 0 :(得分:22)
查看文档中的dependency injection部分。它声明在这种情况下可以使用依赖注入:
任何
@BeforeMethod
(和@AfterMethod
)都可以声明java.lang.reflect.Method
类型的参数。此参数将接收在@BeforeMethod
完成后(或在@AfterMethod
运行的方法之后)将调用的测试方法。
所以基本上你只需在java.lang.reflect.Method
中声明一个@BeforeMethod
类型的参数,你就可以访问以下测试名的名称。类似的东西:
@BeforeMethod
protected void startTest(Method method) throws Exception {
String testName = method.getName();
System.out.println("Executing test: " + testName);
}
还有一种方法可以使用ITestNGMethod
界面(documentation),但由于我不确定如何使用它,我只是让你看看它,如果你很感兴趣。
答案 1 :(得分:1)
下面的示例说明如何在Method
之前获取方法名称和类名@BeforeMethod
public void beforemethod(Method method){
//if you want to get the class name in before method
String classname = getClass().getSimpleName();
//IF you want to get the method name in the before method
String methodName = method.getName()
}
@Test
public void exampleTest(){
}
答案 2 :(得分:1)
下面的示例显示了在使用数据提供程序时如何使用@BeforeMethod中的Object []数组获取参数。
public class TestClass {
@BeforeMethod
public void beforemethod(Method method, Object[] params){
String classname = getClass().getSimpleName();
String methodName = method.getName();
String paramsList = Arrays.asList(params).toString();
}
@Test(dataProvider = "name", dataProviderClass = DataProvider.class)
public void exampleTest(){...}
}
public class DataProvider {
@DataProvider(name = "name")
public static Object[][] name() {
return new Object[][]{
{"param1", "param2"},
{"param1", "param2"}
};
}
}