TestNG和Spring AOP

TestNG和Spring AOP,spring,testng,aop,Spring,Testng,Aop,我想通过AOP向我的testng测试添加一些通用代码(例如,将测试名称记录到logback)。以下是我的方面和测试代码: @Aspect @Component public class TestAspect { ... @Around(value = "execution(* *(..)) && @annotation(org.testng.annotations.Test)") public Object test(@NotNull final ProceedingJoinPo

我想通过AOP向我的testng测试添加一些通用代码(例如,将测试名称记录到logback)。以下是我的方面和测试代码:

@Aspect
@Component
public class TestAspect {
...
@Around(value = "execution(* *(..)) && @annotation(org.testng.annotations.Test)")
public Object test(@NotNull final ProceedingJoinPoint pjp) {
...
}}


@ContextConfiguration(classes = { mysample.SpringTestConfigurator.class })
@WebAppConfiguration
public class GlobalTest extends AbstractTestNGSpringContextTests {
...
@Test(enabled = true, priority = 1)
public void testOS() {
...
}}

但是相位不被称为。问题出在哪里?

我不是Spring用户,但我知道Spring AOP只能拦截Spring bean的方法,如中所述。因此,除非您的测试类是Springbean,否则它将无法工作。如果使用完整的AspectJ,它会


现在您有两个选择:要么将您的测试设置为Springbean(这意味着测试本身需要Spring基础设施才能工作,这不是很好),要么使用AspectJ拦截测试方法。我会推荐后者,但是-你的代码,你的决定。:-)

请共享您的SpringTestConfigurator。您还可以打开spring日志,查看它是否处理与方面相关的任何内容。SpringTest configurator配置各种内容,如LDAP和属性。这里唯一相关的AOP配置是@enableAspectProxy。奇怪的是,其他方面的工作与预期的一样,在我看来,AOP并不仅仅应用于测试方法,而是应用于它所调用的服务方法。如何打开更详细的spring日志?取决于您是使用logback.xml还是log4j.properties。在后一种情况下,尝试添加log4j.logger.org.springframework=DEBUG entry我正在使用logback,在日志中,我觉得它与Spring不代理GlobalTest有关。我用另一种方法解决了它,但仍然想知道它是否可以通过Spring“原生AOP”解决,而不需要LTW或CTW。