2010-06-01 23 views
18

Về cơ bản, tôi có một phương pháp teardown mà tôi muốn đăng nhập vào bàn điều khiển mà thử nghiệm vừa được chạy. Làm thế nào tôi sẽ đi về nhận được chuỗi đó?Làm thế nào để tôi có được tên của phương pháp thử nghiệm đã được chạy trong một phương pháp tearng tearng xuống?

Tôi có thể lấy tên lớp, nhưng tôi muốn phương thức thực tế vừa được thực hiện.

public class TestSomething { 

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

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

nên xuất ra màn hình: "Các thử nghiệm mà chỉ cần chạy là .... testcase"

Tuy nhiên, tôi không biết sự kỳ diệu mà getTestThatJustRanMethodName thực sự cần được.

Trả lời

34

Khai báo một tham số kiểu ITestResult trong @AfterMethod của bạn và TestNG sẽ bơm nó:

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

tks và tôi sử dụng 'Reporter.setCurrentTestResult (kết quả);' để thay đổi luồng báo cáo thành phương pháp kiểm tra – naive

18

Nếu bạn muốn có được tên phương pháp trước các thử nghiệm được thực hiện, bạn có thể sử dụng như sau:

import java.lang.reflect.Method; 

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

Cũng hoạt động cho '@ AfterMethod' ... những gì OP yêu cầu;) –

2

Chỉ cần khai báo tham số java.lang.reflect.Method.

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

Nhưng TestNG cho phép bạn inject nhiều hơn nữa;)

  • Bất kỳ @Before phương pháp hoặc phương pháp @Test có thể khai báo một tham số có kiểu ITestContext.
  • Bất kỳ phương thức @AfterMethod nào có thể khai báo tham số kiểu ITestResult, sẽ phản ánh kết quả của phương pháp thử nghiệm vừa được chạy.
  • Bất kỳ @Before@After phương pháp có thể khai báo một tham số có kiểu XmlTest, có chứa các từ khóa hiện tại.
  • Bất kỳ @BeforeMethod (và @AfterMethod) có thể khai báo một tham số có kiểu java.lang.reflect.Method. Tham số này sẽ nhận được phương thức kiểm tra sẽ được gọi khi phương thức @BeforeMethod kết thúc (hoặc sau khi phương thức chạy cho @AfterMethod).
  • Bất kỳ @BeforeMethod nào có thể khai báo thông số loại Object[]. Tham số này sẽ nhận được danh sách các tham số sắp được cấp cho phương pháp thử sắp tới, có thể được TestNG tiêm vào, chẳng hạn như java.lang.reflect.Method hoặc đến từ @DataProvider.
  • Bất kỳ @DataProvider có thể khai báo một tham số có kiểu ITestContext hoặc java.lang.reflect.Method.Tham số thứ hai sẽ nhận phương thức thử nghiệm sắp được gọi.
0

khác (mặc dù không đơn giản như Cedric's answer) như vậy TestNG hỗ trợ này là để register a listener:

@Listeners({MethodListener.class}) 
public class ListenerTest { 

    @Test 
    public void someTest() { 
    } 

} 

đâu người nghe có thể nhìn như thế này:

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

đặc biệt này người nghe sẽ in tên phương thức (tức là someTest) vào bảng điều khiển. Nó sẽ được thực hiện sau mọi kiểm tra được thực thi.

Các vấn đề liên quan