2017-07-28 10 views
1

私はMessageSource(実際にはJmsDestinationPollingSources)のセットを定期的にポーリングしています。フードの下では、これはキュー項目を持続するOracle AQデータベースです。模擬JMSメッセージソース

@Bean 
@InboundChannelAdapter(value = "queueSourceChannel", poller = @Poller(fixedDelay = "1000")) 
public MessageSource queueSource() { 
    return Jms 
      .inboundAdapter(connectionFactory) 
      .configureJmsTemplate(t -> t.deliveryPersistent(true) 
          .jmsMessageConverter(jacksonJmsMessageConverter) 
      ).destination(queueName).get(); 
} 

しかし、今、私はもちろんのOracleの持続性なし@SpringBootTestを作りたいと思います。

私は今これをしなかった方法では、豆の上(Mockito)をあざけることでした

@MockBean(name = "queueSource") 
private MessageSource queueSource; 

この方法は、テストクラスはMessageSourceがポーリングされていることを心配することなく、実行することができます。

しかし、私が言及したように、私は複数のMessageSourceを持っています。私はこのポーリングを別の方法で無効にしたいと思います。

私は今これをやっている方法は愚かである:

@MockBean(name = "queueSource") 
private MessageSource queueSource; 

@MockBean(name = "queueSource2") 
private MessageSource queueSource2; 

@MockBean(name = "queueSource3") 
private MessageSource queueSource3; 

.. and so on 

私はすべてのMessageSources、またはすべてJmsDestinationPollingSource年代をモックしようとしたが、それは難しいようです(私はPowerMockitoについて読んだけどので、まだそれを試していませんでした私はそれが異なって行うことができると思う)。

私は、テストスコープでポーラーを無効にすることも可能であると考えました。 私は考えなかった私の問題に対する解決策がもっとあると思います。 すべてのサポートが高く評価されています。

+0

おそらく 'autoStartup = false'はInboundChannelAdapterにありますか? – codesmith

+0

'autoStartup'が動作するかもしれませんが、手動で各Beanを起動する必要がありますか? – codesmith

答えて

0

開始バージョン5.0 Spring Integrationは、問題に関してMockとTesting Frameworkを提供します。

@SpringIntegrationTestは、プロパティである:

/** 
* Specify a simple matching patterns ("xxx*", "*xxx", "*xxx*" or "xxx*yyy") for 
* {@link org.springframework.integration.endpoint.AbstractEndpoint} 
* bean names to mark them as {@code autoStartup = false} 
* during context initialization. 
* @return the endpoints name patterns to stop during context initialization 
* @see IntegrationEndpointsInitializer 
* @see org.springframework.util.PatternMatchUtils 
*/ 
String[] noAutoStartup() default {}; 

それはあなたのユースケースのために役立つことができる方法であること。

たとえば、プロファイルがtestの場合は、Beanを作成しない場合でも@Profileを使用して別のオプションを設定できます。

それ以外の場合は、SourcePollingChannelAdapterすべてのBeanをテストの開始時にこのタイプまたはその名前で停止しない限り、選択肢はありません。

+0

Artem Bilanありがとう、私はすぐにこの注釈を試してみます。 @Profileは、私の設定で他の部分にそれらのソースが必要なので、実際にはオプションではありません。 – codesmith