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

问题描述 投票:1回答:1

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

另外在testng中如果说test1失败了,那么由于dependonMethod将跳过test2我怎样才能在aftermethod中读取这个跳过的方法注释值?

@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());

 }
java reflection automation annotations
1个回答
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参数是一个String,指定所需方法的简单名称。 parameterTypes参数是一个Class对象数组,它按声明的顺序标识方法的形式参数类型。如果parameterTypes为null,则将其视为空数组。

© www.soinside.com 2019 - 2024. All rights reserved.