2010-06-01 15 views
18

Básicamente, tengo un método de desmontaje que deseo registrar en la consola cuya prueba acaba de ejecutarse. ¿Cómo voy a conseguir esa cuerda?¿Cómo obtengo el nombre del método de prueba que se ejecutó en un método de prueba y derribo?

Puedo obtener el nombre de clase, pero quiero el método real que acaba de ejecutarse.

public class TestSomething { 

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

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

debe ser la salida a la pantalla: "La prueba que acaba de ejecutar era .... caso_prueba"

Sin embargo, no sé la magia que getTestThatJustRanMethodName debería haber hecho.

Respuesta

34

declarar un parámetro de tipo ITestResult en su @AfterMethod y TestNG lo inyectará:

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

tks, y uso 'Reporter.setCurrentTestResult (result);' para cambiar el flujo de informe al método de prueba – naive

18

Si desea obtener el nombre del método antes se ejecuta la prueba se puede utilizar lo siguiente:

import java.lang.reflect.Method; 

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

También funciona para '@ AfterMethod' ... lo que el OP solicitó;) –

2

Simplemente declare un parámetro java.lang.reflect.Method.

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

Pero TestNG que permite a inject mucho más;)

  • Cualquier método @Before o método @test pueden declarar un parámetro de tipo ITestContext.
  • Cualquier @AfterMethod método puede declarar un parámetro de tipo ITestResult, que reflejará el resultado del método de ensayo que se acaba de ejecutar.
  • Cualquier @Before y @After métodos pueden declarar un parámetro de tipo XmlTest, que contienen la etiqueta actual.
  • Cualquier @BeforeMethod (y @AfterMethod) puede declarar un parámetro de tipo java.lang.reflect.Method. Este parámetro recibirá el método de prueba que se llamará una vez que termine este @BeforeMethod (o después del método como se ejecuta para @AfterMethod).
  • Cualquiera @BeforeMethod puede declarar un parámetro del tipo Object[]. Este parámetro recibirá la lista de parámetros que están a punto de alimentarse para el próximo método de prueba, que podría ser inyectado por TestNG, como java.lang.reflect.Method o puede venir de un @DataProvider.
  • Cualquier @DataProvider puede declarar un parámetro de tipo ITestContext o java.lang.reflect.Method.El último parámetro recibirá el método de prueba que está por invocarse.
0

Otro (aunque no es tan simple como Cedric's answer) de manera que TestNG apoya esto es register a listener:

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

    @Test 
    public void someTest() { 
    } 

} 

donde el oyente podría tener este aspecto:

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

Este particular oyente imprimirá el nombre del método (es decir, someTest) en la consola. Se ejecutará después de cada prueba ejecutada.

Cuestiones relacionadas