9

我有一个方面在我的 TestNG 测试方法引发异常后运行。我想将测试方法名称添加到我的 aspectj 方法中。

对此有什么想法吗?请在下面找到我的代码示例:

方面:

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

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

测试:

@Test

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

2 回答 2

6

您需要将切入点类型从更改callexecution

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

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

编辑:@Test也许专门拦截带注释的方法会更干净:

import org.testng.annotations;

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

    after() throwing (AssertionError e): testMethod() {
        System.out.println(thisJoinPointStaticPart.getSignature());
    }
}
于 2012-09-22T07:40:20.390 回答
3

您可以使用:

thisJoinPoint.getSignature().getName()

尽管您必须直接从您的测试方法中抛出异常。Assert.equals()抛出异常不是你的测试方法。

于 2012-09-18T21:32:43.180 回答