通过反射在单元测试中找到参数化方法

时间:2019-02-19 17:36:06

标签: java reflection automation annotations

我有一个下面的示例代码,我尝试在after方法中读取testid,对于没有参数的方法,它很好用,但是我的方法将Map作为参数..并且失败了。 我无法弄清楚如何在Aftermethod中读取该方法的参数化方法。-

还在testng中,如果说test1失败,则由于dependonMethod而将跳过test2,我如何在之后的方法中仍如何读取此跳过的方法注释值?

@Data(testId = 1623)
@Test(description = "test 1")
public void readTestAnnotation(Map<String,String> inputData) {
    logger.assertTrue(true, " test pass");
    logger.assertAll();
}


@Data(testId = 1645)
@Test(dependsOnMethods= {"readTestAnnotation"},  description = "test 
2")
public void readTestAnnotation1(Map<String,String> inputData) {
    logger.assertTrue(true," test failed");
    logger.assertAll();
}


@Data(testId = 1646)
@Test(dependsOnMethods = {"readTestAnnotation1"}, description = 
"test3")
public void readTestAnnotation2(Map<String,String> inputData) {
    logger.assertTrue(true," test failed");
    logger.assertAll();
}


 @AfterMethod(alwaysRun = true)
public void readtestId(ITestResult tr) throws NoSuchMethodException, 
SecurityException {
String methodName = tr.getMethod().getMethodName();
UseAsTestId ta = 
sampletest.class.getMethod(methodName).
   getAnnotation(UseAsTestRailId.class);

    System.out.println(ta.testRailId());

 }

1 个答案:

答案 0 :(得分:1)

您需要对参数类型使用getMethod:

sampletest.class.getMethod(methodName).
   getAnnotation(UseAsTestRailId.class, Map.class);

javadoc报价:

public Method getMethod(String name,
                         Class<?>... parameterTypes)
                  throws NoSuchMethodException,
                         SecurityException
  

返回反映指定公共成员的Method对象   类或接口的方法

     
    

由该Class对象表示。 name参数是一个字符串     指定所需方法的简单名称。 parameterTypes     参数是Class对象的数组,用于标识方法的     形式参数类型,按声明的顺序。如果parameterTypes为null,     将其视为空数组。