I have an aspect that runs after an exception is thrown from my TestNG test method. I would like to get the Test method name into my aspectj method.
Any thoughts on this? Please find my code sample below:
Aspect:
pointcut publicCall(): call(public * *(..));
after() throwing (AssertionError e): publicCall() {
logger.debug("Assertion Error thrown");
System.out.println("Threw an exception: " + e);
}
Test:
@Test
public void testScenarioOne(){
logger.debug("From Scenario One Test");
Assert.assertEquals(true, false);
}
You need to change your pointcut type from call
to execution
:
pointcut publicMethod(): execution(public * *(..));
after() throwing (AssertionError e): publicMethod() {
System.out.println(thisJoinPointStaticPart.getSignature());
}
Edit: Maybe it would be even cleaner to specifically intercept @Test
annotated methods:
import org.testng.annotations;
public aspect TestExceptionInterceptor {
pointcut testMethod(): execution(@Test * *(..));
after() throwing (AssertionError e): testMethod() {
System.out.println(thisJoinPointStaticPart.getSignature());
}
}