@봄에 예약된 테스트
Spring은 예를 들어 주석을 사용하여 특정 간격으로 작업을 예약하고 실행할 수 있습니다.
이 동작을 유닛 테스트하는 편리한 방법이 있습니까?
물론 제가 직접 콩의 방법을 부를 수도 있지만, 구성 오류 등으로 인해 여러 번의 처형과 같은 문제에 부딪히지 않도록 하고 싶습니다.
다른 프레임워크는 사용자가 시간을 빨리 보낼 수 있는 가능성을 제공합니다.한 가지 예는 전화를 걸 수 있는 활동입니다.
org.activiti.engine.impl.util.ClockUtil.setCurrentTime(date)
프레임워크에서 사용하는 시간을 단축합니다.
봄에 비교할 만한 것이 있습니까?
기본적으로 제가 하고 싶은 것은 단위 테스트에서 이와 같은 것입니다(사용하여 실행).SpringJUnit4ClassRunner
)
@Test public void testTaskScheduling() {
assertThat(someOtherBean.getSomeProperty(), is(equalTo(whatIinitiallyExpect)));
SpringClockUtil.setDate(dateInTwoHours)// This is what I am missing
SpringTaskExecutor.executeAllScheduledTasks() // Also missing
assertThat(someOtherBean.getSomeProperty(), is(equalTo(whatIexpectNow)));
}
일반 JUNit을 사용하여 실제 메서드 실행을 테스트할 수 있지만, 다음과 같은 경우에는@Scheduled(cron = "0 * * * * *")
지정한 값이 올바르므로 다음을 사용할 수 있습니다.
@Test
public void testScheduler(){
// to test if a cron expression runs only from Monday to Friday
org.springframework.scheduling.support.CronTrigger trigger =
new CronTrigger("0 0 1 * * MON-FRI");
Calendar today = Calendar.getInstance();
today.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss EEEE");
final Date yesterday = today.getTime();
log.info("Yesterday was : " + df.format(yesterday));
Date nextExecutionTime = trigger.nextExecutionTime(
new TriggerContext() {
@Override
public Date lastScheduledExecutionTime() {
return yesterday;
}
@Override
public Date lastActualExecutionTime() {
return yesterday;
}
@Override
public Date lastCompletionTime() {
return yesterday;
}
});
String message = "Next Execution date: " + df.format(nextExecutionTime);
log.info(message);
}
다음은 출력입니다.
Yesterday was : 2015/11/06 11:41:58 Friday
Next Execution date: 2015/11/09 01:00:00 Monday
마지막 실행으로(에서 설정)TriggerContext
)는 금요일이었고, 다음 사형은 다음 주 월요일에 집행될 것입니다.
Spring api를 만지작거리다가 이 해결책을 발견했습니다. 누군가 저에게 도움이 되었기를 바랍니다.
빈을 직접 호출하여 예약된 코드를 테스트합니다.
그런 다음 다음을 사용하여 스케줄링 구성을 테스트합니다.
테스트 환경에 코드를 배포하고 잠시 실행한 후 로그 및/또는 결과를 검사합니다(예약된 코드가 일부 로깅을 수행하거나 가시적인 결과를 생성하는지 확인).
또는
를 사용하여 Spring XML 구성의 스케줄링 구성 외부화<task: />
네임스페이스 및 장치 테스트별 간격/간격 주입(장치/통합 테스트에서 사용할 수 있는 짧은 간격 및 빈번한 간격)PropertyPlaceHolderConfigurer
그런 다음 예약된 코드(모살된 코드 또는 실제 코드)가 주어진 시간(짧은 시간) 동안 적절한 횟수로 호출되었는지 확인합니다.
언급URL : https://stackoverflow.com/questions/17327956/testing-scheduled-in-spring
'programing' 카테고리의 다른 글
Android SDK 관리자가 열리지 않음 (0) | 2023.08.06 |
---|---|
포함된 JAR에 Spring의 @ComponentScan 검색 구성 요소를 만드는 방법 (0) | 2023.08.06 |
index.php를 실행하는 대신 nginx & php7.3-fpm 다운로드에 대한 다음 클라우드 (0) | 2023.08.01 |
봄 부츠가 세션 쿠키를 발행하지 않도록 만드는 방법? (0) | 2023.08.01 |
최대 절전 모드를 사용하여 mariadb 시퀀스 nextval이 2씩 증가하고 있습니다. (0) | 2023.08.01 |