我正在尝试单元测试,其中一个方面类在单元测试中工作得很好。
情况。
- 将Spring Boot从1.5.9升级到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();
}
https://github.com/spring-projects/spring-framework/blob/0819a9fcc9a1168521995e0bac7de5633a819780/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/AbstractAspectJAdvisorFactory.java#L105-L110
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类 Package ,验证失败。
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?
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/aop/aspectj/annotation/AspectJProxyFactory.html
http://useof.org/java-open-source/org.springframework.aop.aspectj.annotation.AspectJProxyFactory
https://github.com/spring-projects/spring-framework/blob/3aa2605fdaa56d5c007f476f3f9bd1c550ec368c/spring-context/src/test/java/org/springframework/aop/aspectj/BeanNamePointcutAtAspectTests.java
1条答案
按热度按时间6jygbczu1#
更换
与
解决这个问题,触发方面(尽管它无助于解决在测试中验证方面本身,如果这是目标的话)