2010-06-01 5 views
18

Temel olarak, hangi testin çalıştırıldığı konsola giriş yapmak istediğim bir gözyaşı yöntemim var. Bu ipi almak için nasıl giderim?Testng yırtığı yönteminde çalıştırılan sınama yönteminin adını nasıl alabilirim?

Sınıf adını alabilirim, ancak çalıştırılan gerçek yöntemi istiyorum.

public class TestSomething { 

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

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

ekrana çıktı olmalıdır:

Ancak, ben getTestThatJustRanMethodName aslında olmalıdır büyü bilmiyorum "sadece ran sınavdı .... testcase".

cevap

34

sizin @AfterMethod yazın ITestResult bir parametre bildirmek ve TestNG enjekte edecek:

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

tks ve 'Reporter.setCurrentTestResult (sonuç);' – naive

18

test aşağıdaki kullanabilirsiniz yürütüldüğünde önce yöntem adı almak isterseniz:

import java.lang.reflect.Method; 

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

test yöntemini değiştirmek için rapor akışını değiştirmek için Ayrıca '@ AfterMethod' için çalışır ... OP ne istedi;) –

2

Sadece bir java.lang.reflect.Method parametresini bildirin. Herhangi bir @Before yöntemi veya @Test yöntem türü ITestContext bir parametresini ilan edebilir

  • );

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

    Ancak TestNG inject daha bir çok olanak tanır.

  • herhangi sadece çalıştırıldı test yönteminin sonuçları yansıtır tip ITestResult bir parametre, ilan edebilir yöntem @AfterMethod.
  • herhangi @Before ve @After yöntemler mevcut etiketi içeren tip XmlTest bir parametre, ilan edebilir. tip java.lang.reflect.Method bir parametresini ilan edebilir
  • herhangi @BeforeMethod (ve @AfterMethod). Bu parametre, @BeforeMethod bittiğinde (veya @ MefterMethod için çalıştırılan yöntemden sonra) çağrılacak olan test yöntemini alır.
  • @BeforeMethod @BeforeMethod Object[] türünde bir parametre bildirebilir. Bu parametre, TestNG tarafından gibi enjekte edilebilecek veya bir 'dan gelebilecek olan yaklaşan test yöntemine beslenecek olan parametre listesini alacaktır.
  • herhangi @DataProvider tip ITestContext veya java.lang.reflect.Methodbir parametresini ilan edebilir.Sonuncu parametre, çağrılmak üzere olan test yöntemini alır.
0

TestNG register a listener bu olduğunu desteklediğini başka (olmasa da basit Cedric's answer gibi) yol: dinleyici aşağıdaki gibi görünebilir nerede

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

Bu özel dinleyici, yöntem ismini (yani someTest) konsola yazdıracaktır. Her bir testinden sonra 'dan sonra çalıştırılacaktır.