如何使用 JUnit 测试 Spring Boot 切面方法?
How to test an SpringBoot aspect method with JUnit?
我使用 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
@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();
}
}
结果正常,但没有执行方面方法代码。
@ExtendWith(SpringExtension.class)
@SpringBootTest
@ActiveProfiles("sit")
class TaskTest {
@Autowired
private TaskService taskService;
@Test
void testCronLoggerSuccess() throws CronException {
taskService.testCronLogger("test Success");
...
}
}
注意:@ActiveProfiles("sit")
用于 H2 数据库。
我使用 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
@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();
}
}
结果正常,但没有执行方面方法代码。
@ExtendWith(SpringExtension.class)
@SpringBootTest
@ActiveProfiles("sit")
class TaskTest {
@Autowired
private TaskService taskService;
@Test
void testCronLoggerSuccess() throws CronException {
taskService.testCronLogger("test Success");
...
}
}
注意:@ActiveProfiles("sit")
用于 H2 数据库。