问题描述

使用 springboot 实现了 aop,通过 controller 的接口测试,AOP正常执行,但是单元测试的时候 AOP 失效,Debug 也没有走 AOP 的逻辑。

原因

  1. @EnableAspectJAutoProxy是开启aop功能的注解。
  2. springboot默认开启@EnableAspectJAutoProxy(true)。
  3. 但是在单元测试时默认是不开启注解@EnableAspectJAutoProxy,所以就没有开启AOP功能,执行不了AOP逻辑。

解决办法

在单元测试的类上加注解@EnableAspectJAutoProxy(proxyTargetClass = true),开启AOP功能。

/**
 * @author hubz
 * @date 2022/1/8 22:08
 **/
@SpringBootTest
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class TestAopOrder {

    @Autowired
    private TestAopImpl testAopImpl;

    @Test
    public void tt() {
        testAopImpl.testAOPOrder("haha");
    }

}

==注意:== 如果切面上没有@Component注解,那么在执行测试类时将不会加载注解,此时可以使用以下注解加载切面类和待测试类
@ContextConfiguration(classes = {TestAopImpl.class, TestAspect.class})