2016-10-24 27 views
3

Mavenを使用してSpringBootアプリケーションを開発しています。テスト中に予約メソッドが呼び出されました

@Componentアノテーションを持つクラスがあり、メソッドはmで、@Scheduled(initialDelay = 1000, fixedDelay = 5000)アノテーションがあります。ここでは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); 
    } 

} 

は今、として定義されます秒。

もちろん、アプリケーションが実行されるたびにスケジュールされたタスクを実行したいだけです。テストを実行したときにスケジュールされたタスクが実行されないようにするにはどうすればよいですか?あなたが好きな個別の設定クラスに@EnableSchedulingを抽出することができます

答えて

11

@Configuration 
@Profile("!test") 
@EnableScheduling 
class SchedulingConfiguration { 
} 

に行うのならば、残っている唯一のことはしてテストクラスに注釈を付けることで、あなたのテストで「テスト」プロファイルを活性化することです。

@ActiveProfiles("test") 

このソリューションの可能性のある欠点は、あなたがテストの本番コードを認識させることです。

また、プロパティ、代わりに@ProfileSchedulingConfigurationに注釈を付けるのと遊ぶことができる、あなただけの生産application.propertiesに存在するプロパティでそれ@ConditionalOnProperty作ることができます。たとえば、次のように

  • 追加プロパティsrc/test/resources/application.propertiesへ:

    scheduling.enabled = falseを

  • 次のいずれかを実行する際のテストで実行されません

    @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 ")'はテストでは意味がありませんか? – nbro

+0

"テスト"プロファイルがアクティブでない場合、構成クラスが作成されることを意味します。 –

+0

[this solution](http://stackoverflow.com/questions/29014496/disable-enablescheduling-on-spring-tests)についてどう思いますか?私は特定の設定を作成したことがありません(メインクラスに '@ SpringBootApplication'で注釈を付けることは別です)。どこに新しい設定を入れるべきですか? – nbro

関連する問題