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());
}
}
You can use:
thisJoinPoint.getSignature().getName()
although you will have to throw the exception directly from your test method. Assert.equals()
is throwing the exception not your test method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With