【发布时间】:2021-12-26 20:59:41
【问题描述】:
我使用 Springboot,我想通过 JUnit 测试我的新自定义注解。
我在importData 方法上的@CronLogger 自定义注释的原始代码:
@Service
@RequiredArgsConstructor
@Slf4j
public class ImportTask {
@Async
@Scheduled(cron = "${import}")
@SchedulerLock(name = "import")
@CronLogger()
public void importData() {
...
}
}
我的自定义注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CronLogger {
}
我的自定义 Aspect 方法:
@Aspect
@Component
@EnableAspectJAutoProxy
public class CronLoggerAspect {
private static final Logger log = LoggerFactory.getLogger(CronLoggerAspect.class);
@Around("@annotation(CronLogger)")
public Object trace(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("CronLogger");
log.debug("CronLogger");
return joinPoint.proceed();
}
}
我的 JUnit 测试:
@Slf4j
@ExtendWith(MockitoExtension.class)
@Import(AnnotationAwareAspectJAutoProxyCreator.class) // activate aspect
class ImportTaskTest {
@InjectMocks
private ImportTask importTask;
@Test
void importData() throws JSchException, SftpException, SftpTransfertException {
// execute test
importTask.importData();
}
}
结果正常,但没有执行 Aspect 方法代码。
【问题讨论】:
-
如果您使用运行时编织,希望您使用
-javaagent:<path-to-aspectjweaver-jar>开始测试。
标签: java spring-boot aspectj spring-boot-test