如何获取在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都可以声明
ITestContext
或java.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
)打印到控制台。 它将在每次执行测试后执行。