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

时间:2011-12-12 16:46:12

标签: java unit-testing testng

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

3 个答案:

答案 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"}
       };
   }
}