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

2022-09-02 03:33:27

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


答案 1

请查看文档中的依赖关系注入部分。它指出,例如,在这种情况下可以使用依赖注入:

任何 (and) 都可以声明 类型的参数。此参数将接收测试方法,该方法将在完成时调用(或在方法运行为 )@BeforeMethod@AfterMethodjava.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


答案 2

下面的示例演示如何在使用数据提供程序时获取参数,在@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"}
       };
   }
}

推荐