2010-06-01 1 views
18

기본적으로 테스트를 실행 한 콘솔에 기록하려는 teardown 방법이 있습니다. 어떻게하면 그 문자열을 얻을 수 있습니까?testng tear down 메소드에서 실행 된 테스트 메소드의 이름을 얻으려면 어떻게해야합니까?

클래스 이름을 얻을 수 있지만 방금 실행 된 실제 메소드가 필요합니다.

public class TestSomething { 

    @AfterMethod 
    public void tearDown() { 
     system.out.println('The test that just ran was....' + getTestThatJustRanMethodName()'); 
    } 

    @Test 
    public void testCase() { 
     assertTrue(1==1); 
    } 
} 

는 화면에 출력한다 :

그러나, 나는 getTestThatJustRanMethodName 실제로해야 마법을 모른다 "바로 실행 테스트했다 .... 테스트 케이스".

답변

34

당신의 @AfterMethod에 형 ITestResult의 매개 변수를 선언하고 TestNG를 그것을 주입됩니다

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

tks이고 'Reporter.setCurrentTestResult (result);'를 사용합니다. 보고서 스트림을 테스트 메소드 – naive

18

당신이 테스트는 다음을 사용할 수 있습니다 실행 전에 메소드 이름 얻고 싶은 경우에 :

import java.lang.reflect.Method; 

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

으로 변경하는 방법'@ AfterMethod'에도 ... OP가 요청한 것;) –

2

java.lang.reflect.Method 매개 변수를 선언하기 만하면됩니다. 모든 @Before 방법 또는 @Test 방법은 유형 ITestContext의 매개 변수를 선언 할 수

  • )

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

    그러나 TestNG를가 inject 더 많은 당신 수 있습니다.

  • 는 모든 는 실행 된 시험 방법의 결과를 반영 유형 ITestResult의 매개 변수를 선언 할 수 방법을 @AfterMethod.
  • 상관 @Before @After 방법은 현재의 태그가 입력 XmlTest의 매개 변수를 선언 할 수있다. 타입 java.lang.reflect.Method의 매개 변수를 선언 할 수
  • 상관은 을 @BeforeMethod ( 와는을 @AfterMethod). 이 매개 변수는 @BeforeMethod가 완료되면 (또는 @AfterMethod에 대해 실행 된 메서드 후에) 호출 될 테스트 메서드를 수신합니다.
  • 임의의 @BeforeMethod의 매개 변수를 선언 할 수 있습니다. 이 매개 변수는 다가오는 테스트 방법에 제공 될 매개 변수 목록을 수신합니다.이 매개 변수 목록은 java.lang.reflect.Method 또는 @DataProvider에서 가져올 수 있습니다.
  • 는 모든 @DataProvider 유형 ITestContext 또는 java.lang.reflect.Method의 매개 변수를 선언 할 수 있습니다.후자의 매개 변수는 호출 될 테스트 메소드를 수신합니다.
0

TestNG를가 register a listener에 이것이 지원하는 또 다른 (아니지만 간단 Cedric's answer 등) 방법 : 리스너는 다음과 같이 수있는 곳

@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)을 콘솔에 인쇄합니다. 마다 실행됩니다.마다 테스트가 실행됩니다.

관련 문제