2010-06-01 16 views
18

Fondamentalmente, ho un metodo di smontaggio che voglio registrare sulla console su quale test è stato appena eseguito. Come potrei fare per ottenere quella stringa?Come posso ottenere il nome del metodo di prova che è stato eseguito in un metodo di rimozione del test?

Posso ottenere il nome della classe, ma voglio il metodo effettivo che è stato appena eseguito.

public class TestSomething { 

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

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

dovrebbe output sullo schermo: "Il test che appena correva era .... TestCase"

Tuttavia, non so la magia che getTestThatJustRanMethodName dovrebbe effettivamente essere.

risposta

34

Dichiarare un parametro di tipo ITestResult nel vostro @AfterMethod e TestNG sarà iniettare:

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

tks, e io uso 'Reporter.setCurrentTestResult (risultato);' per cambiare il flusso del report per il metodo di prova – naive

18

Se si desidera ottenere il nome del metodo prima il test viene eseguito è possibile utilizzare il seguente:

import java.lang.reflect.Method; 

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

Funziona anche per '@ AfterMethod' ... cosa ha richiesto l'OP;) –

2

Basta dichiarare un parametro java.lang.reflect.Method.

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

Ma TestNG consente di inject molto di più;)

  • Qualsiasi metodo @Before o @Test metodo possono dichiarare un parametro di tipo ITestContext.
  • Qualsiasi @AfterMethod metodo può dichiarare un parametro di tipo ITestResult, che rifletterà il risultato del metodo di prova che è stato appena eseguito.
  • Qualunque @Before e @After metodi possono dichiarare un parametro di tipo XmlTest, che contengono tag corrente.
  • Qualunque @BeforeMethod (e @AfterMethod) può dichiarare un parametro di tipo java.lang.reflect.Method. Questo parametro riceverà il metodo di prova che verrà chiamato una volta terminato questo @BeforeMethod (o dopo il metodo eseguito per @AfterMethod).
  • Qualunque @BeforeMethod può dichiarare un parametro di tipo Object[]. Questo parametro riceverà l'elenco dei parametri che stanno per essere inviati al metodo di test imminente, che può essere iniettato da TestNG, come java.lang.reflect.Method o provenire da uno @DataProvider.
  • Qualunque @DataProvider può dichiarare un parametro di tipo ITestContext o java.lang.reflect.Method.Il secondo parametro riceverà il metodo di prova che sta per essere invocato.
0

altro (anche se non così semplice come Cedric's answer) modo in cui TestNG supporta questo obiettivo è quello register a listener:

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

    @Test 
    public void someTest() { 
    } 

} 

Dove l'ascoltatore potrebbe assomigliare a questo:

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

Questo particolare l'ascoltatore stamperebbe il nome del metodo (ovvero someTest) nella console. Sarebbe eseguito dopo il ogni test eseguito.

Problemi correlati