2012-09-18 14 views
7

Tengo un aspecto que se ejecuta después de que se lanza una excepción de mi método de prueba TestNG. Me gustaría obtener el nombre del método de prueba en mi método aspectj.Cómo obtener el nombre del método que arrojó la excepción en Java

¿Alguna idea de esto? Por favor, encontrar mi código de ejemplo a continuación:

Aspecto:

pointcut publicCall(): call(public * *(..)); 

after() throwing (AssertionError e): publicCall() { 
    logger.debug("Assertion Error thrown"); 
    System.out.println("Threw an exception: " + e); 
} 

prueba:

@Test 

public void testScenarioOne(){ 
    logger.debug("From Scenario One Test"); 
    Assert.assertEquals(true, false); 
} 

Respuesta

4

Es necesario cambiar el tipo de punto de corte call-execution:

pointcut publicMethod(): execution(public * *(..)); 

after() throwing (AssertionError e): publicMethod() { 
    System.out.println(thisJoinPointStaticPart.getSignature()); 
} 

Editar: tal vez sería aún más limpio que específicamente intercepción @Test métodos anotados:

import org.testng.annotations; 

public aspect TestExceptionInterceptor { 
    pointcut testMethod(): execution(@Test * *(..)); 

    after() throwing (AssertionError e): testMethod() { 
     System.out.println(thisJoinPointStaticPart.getSignature()); 
    } 
} 
+0

¡Gracias! Cambiar el tipo de corte puntual de llamada a ejecución fue el truco. (el segundo fragmento no se compiló). – rookie007r

+0

Por lo que recuerdo, acabo de copiar y pegar el segundo fragmento de mi editor donde se compiló muy bien. ¿Puedes ser mas específico? ¿Qué mensaje de error recibes? – kriegaex

+0

El error que recibió fue probable porque necesita especificar el paquete totalmente calificado como pointcut testMethod(): execution (@ org.testng.annotations.Test * * (..)); –

2

que puede utilizar:

thisJoinPoint.getSignature().getName() 

a pesar de que tendrá que emitir la excepción directamente desde su método de prueba. Assert.equals() está arrojando la excepción no es su método de prueba.

+1

creo thisStaticJoinPoint haría Además trabajo. –

+1

Bueno ... ¡Gracias! pero eso me está dando el método "assertEquels". Necesito el método de prueba (es decir, testScenarioOne). – rookie007r

Cuestiones relacionadas