programing

@봄에 예약된 테스트

powerit 2023. 8. 6. 10:25
반응형

@봄에 예약된 테스트

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

반응형