【发布时间】:2020-11-16 10:16:49
【问题描述】:
我正在尝试单元测试,其中方面类在单元测试时运行良好。
情况。
- 从 1.5.9 升级 Spring Boot -> 2.3.1。
- Mockito、Junit 框架升级(mockito-core 1.10.19 -> 3.3.3)
我有一个问题,即升级时 Spring AOP(内部 AspectJ)的单元测试不会通过。原因在于AbstractAspectJAdvisorFactory 类从哪里验证给定的方面类是否是真正的方面类。
我的代码
@Mock
private RepositoryAspect aspect;
@InjectMocks
private NicknameRepository nicknameRepository;
@Before
public void setup() {
AspectJProxyFactory aspectJProxyFactory = new AspectJProxyFactory(nicknameRepository);
aspectJProxyFactory.addAspect(aspect); // fails
nicknameRepository = aspectJProxyFactory.getProxy();
}
public void validate(Class<?> aspectClass) throws AopConfigException {
// If the parent has the annotation and isn't abstract it's an error
if (aspectClass.getSuperclass().getAnnotation(Aspect.class) != null &&
!Modifier.isAbstract(aspectClass.getSuperclass().getModifiers())) {
throw new AopConfigException("[" + aspectClass.getName() + "] cannot extend concrete aspect [" +
aspectClass.getSuperclass().getName() + "]");
}
...
它正常工作。但是,从 mockito-core 1.10.19 升级到 3.3.3 后,我发现由于封装的 Mock 类不同,验证失败。
1.10.19
<instance>$$EnhancerByMockitoWithCGLIB => not classified as a Mock class
3.3.3
<instance>$$MockitoMock => classified wrapped Mock class, not an aspect class
我的研究如下。我刚刚发现 Spring AOP 并没有使用 Mockito 作为注入方面,而是一个真实的实例及其变量。我找不到期望代码的正确方法。如何尝试使用 Mockito?
http://useof.org/java-open-source/org.springframework.aop.aspectj.annotation.AspectJProxyFactory
【问题讨论】:
-
你解决了吗?
-
@MariaInesParnisari 不。我现在只是暂时跳过单元测试。
标签: unit-testing junit mockito spring-aop