2016-10-24 5 views
3

Maven을 사용하여 SpringBoot 응용 프로그램을 개발하고 있습니다.테스트 중에 예약 된 메서드가 호출됩니다.

나는 @Scheduled(initialDelay = 1000, fixedDelay = 5000) 주석이있는 @Component 주석이있는 클래스가 있습니다. 여기서 fixedDelay으로 설정되어 작업 완료시 측정 된 호출 간격을으로 지정할 수 있습니다.

나는 또한 메인 클래스의 @EnableScheduling 주석했습니다

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class BankitCrawlerTests { 

... 

} 

예약 된 작업 m는 매 5를 실행한다 : 나는 테스트를 실행할 때마다

@SpringBootApplication 
@EnableScheduling 
public class FieldProjectApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(FieldProjectApplication.class, args); 
    } 

} 

지금과 같이 정의 초.

물론 응용 프로그램이 실행될 때마다 예약 된 작업을 실행하고 싶습니다. 테스트를 실행할 때 예약 된 작업이 실행되지 않도록하려면 어떻게해야합니까?

당신이 일을 끝낼되면
@Configuration 
@Profile("!test") 
@EnableScheduling 
class SchedulingConfiguration { 
} 

, 남아있는 유일한 것은 함께 테스트 클래스를 주석하여 테스트에서 "테스트"프로필을 활성화하는 것입니다 : 당신이 좋아하는 별도의 구성 클래스에 @EnableScheduling을 추출 할 수 있습니다

답변

11

: 이 솔루션의

@ActiveProfiles("test") 

가능한 단점은 시험 생산 코드를 인식하게한다는 것입니다.

또는 당신은 속성 재생할 수 있습니다 대신 @ProfileSchedulingConfiguration 주석, 당신은 단지 생산 application.properties에 존재하는 특성으로 @ConditionalOnProperty을 만들 수 있습니다. 예를 들면 :

  • 추가 특성 src/test/resources/application.properties에 :

    scheduling.enabled = 거짓

  • 당신은 다음 중 하나를 수행 할 때 테스트에서 실행되지 않습니다

    @SpringBootApplication 
    public class DemoApplication { 
    
        public static void main(String[] args) { 
         SpringApplication.run(DemoApplication.class, args); 
        } 
    
        @Configuration 
        @ConditionalOnProperty(value = "scheduling.enabled", havingValue = "true", matchIfMissing = true) 
        @EnableScheduling 
        static class SchedulingConfiguration { 
    
        } 
    } 
    

    스케줄러

    맞춤 설정 @SpringBootTest :

    @SpringBootTest(properties = "scheduling.enabled=false")

+0

당신은 내 시험에서 일정을 원하지 않는 것을 이해 했습니까? '@Profile ("! test")'는 테스트에서 _not_을 의미합니까? – nbro

+0

"테스트"프로필이 활성화되어 있지 않으면 구성 클래스가 만들어집니다. –

+0

[이 해결책] (http://stackoverflow.com/questions/29014496/disable-enablesceduling-on-spring-tests)에 대해 어떻게 생각하십니까? 필자는 (@ SpringBootApplication'을 사용하여 메인 클래스에 주석을 달아주는 것과는 별도로) 특정 설정을 만들지 않았습니다. 어디에서 일반적으로 새로운 설정을해야합니까? – nbro

관련 문제