如何获取在testng拆卸方法中运行的测试方法的名称?

基本上,我有一个拆解方法,我想登录到控制台,测试刚刚运行。 如何获得该字符串?

我可以获取类名,但我想要刚刚执行的实际方法。

public class TestSomething { @AfterMethod public void tearDown() { system.out.println('The test that just ran was....' + getTestThatJustRanMethodName()'); } @Test public void testCase() { assertTrue(1==1); } } 

应该输出到屏幕:“刚刚运行的测试是…. testCase”

但是,我不知道getTestThatJustRanMethodName实际上应该是什么魔法。

在@AfterMethod中声明一个ITestResult类型的参数,TestNG会注入它:

 @AfterMethod public void afterMethod(ITestResult result) { System.out.println("method name:" + result.getMethod().getMethodName()); } 

如果要执行测试之前获取方法名称可以使用以下命令:

 import java.lang.reflect.Method; @BeforeMethod public void nameBefore(Method method) { System.out.println("Test name: " + method.getName()); } 

只需声明一个java.lang.reflect.Method参数。

  @BeforeMethod public void beforeTestMethod(Method testMethod){ System.out.println("Before Testmethod: " + testMethod.getName()); } 

但TestNG允许你注入更多;)

  • 任何@Before方法或@Test方法都可以声明ITestContext类型的参数。
  • 任何@AfterMethod方法都可以声明一个ITestResult类型的参数,它将反映刚刚运行的测试方法的结果。
  • 任何@Before@After方法都可以声明一个XmlTest类型的参数,该参数包含当前标记。
  • 任何@BeforeMethod (和@AfterMethod )都可以声明java.lang.reflect.Method类型的参数。 此参数将接收将在@BeforeMethod完成后(或在运行@AfterMethod之后的方法之后)调用的测试方法。
  • 任何@BeforeMethod都可以声明Object[]类型的参数。 此参数将接收即将提供给即将到来的测试方法的参数列表,该测试方法可以由TestNG注入,例如java.lang.reflect.Method也可以来自@DataProvider
  • 任何@DataProvider都可以声明ITestContextjava.lang.reflect.Method类型的参数。 后一个参数将接收即将被调用的测试方法。

TestNG支持的另一种方法(虽然不像Cedric的答案那么简单)是注册一个监听器 :

 @Listeners({MethodListener.class}) public class ListenerTest { @Test public void someTest() { } } 

听众可能看起来像这样:

 public class MethodListener implements IInvokedMethodListener { @Override public void beforeInvocation(IInvokedMethod method, ITestResult testResult) { } @Override public void afterInvocation(IInvokedMethod method, ITestResult testResult) { System.out.println(method.getTestMethod().getMethodName()); } } 

此特定侦听器会将方法名称(即someTest )打印到控制台。 它将在每次执行测试后执行。