有没有办法在TestNG中使用@BeforeMethod时获取方法元数据?

Usm*_*ail 19 java testng unit-testing

我正在使用TestNG并进行一系列测试.我想在每个需要有关方法信息的测试方法之前执行操作.举个简单的例子,假设我想在执行之前打印方法的名称.我可以编写一个带注释的方法@BeforeMethod.如何将参数注入该方法?

tal*_*las 25

请查看文档中的依赖项注入部分.它声明在这种情况下可以使用依赖注入:

任何@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);
}
Run Code Online (Sandbox Code Playgroud)

还有一种使用ITestNGMethod界面(文档)的方法,但由于我不确定如何使用它,如果你感兴趣,我会让你看看它.


小智 5

下面的例子展示了如何在使用数据提供者时获取参数,在@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"}
       };
   }
}
Run Code Online (Sandbox Code Playgroud)