2017-05-18 12 views
1

@ SqsListener-annotatedメソッドを持つコンポーネント "MessageHandler"を介してSQSキューをリッスンするだけでなく、メッセージが到着したとき。モジュール/統合テストでSpring SQSハンドラを無効にする方法

また、本番環境でhttpを介して正常性ステータスとメトリックを取得したいので、ブートスターター - ウェブ依存関係もあります。

私はモジュールテストを作成しましたが、すでにアプリケーションコンテキストとautowires beanがあります。

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = NONE) 

しかし、MessageHandlerのBeanはまた、インスタンス化されますと、私は予防したいAWS、に接続しようとする:私はまた、試験で必要とされていないWebサーバを無効にする方法を見つけました。

@Component 
@Primary 
public class TestMessageHandler implements MessageHandler { 

    @Override 
    public void handleMessage(final NewMessage newMessage) throws Exception { 
     return null; 
    } 
} 

しかし、今、私がしたい:作品

一つの解決策は、のhandleMessageメソッド@SqsListenerアノテーションを持っていない@Primary注釈付きのsrc /テスト/ Javaでテスト実装を持つことです(実際の)MessageHandler beanをテストします。つまり、Springでインスタンス化して依存関係をautowireしたいのですが、@SqsListenerアノテーションをアクティブにしたくないので、私のテストでこれを呼び出すことができます:

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = NONE) 
public class IntegrationTest { 

    @Autowired 
    private RealMessageHandler messageHandler; 


    @Test 
    public void testHandleMessage() throws Exception { 
     messageHandler.handleMessage(new NewMessage(...)); 
    } 
} 

私が必要とするのは、 f RealMessageHandlerのhandleMessageメソッドのSQSリスナを設定するspring-cloud-aws-starterモジュールの魔法。

どのように私はそれを行うだろうか? org.springframework.beans.factory.BeanCreationException:によって引き起こさ

答えて

-1
@TestConfiguration 
@EnableAutoConfiguration(exclude = {MessagingAutoConfiguration.class, CloudAutoConfiguration.class, 
     ContextStackAutoConfiguration.class}) 
public class TestConfig { 

    @Bean 
    public SimpleMessageListenerContainer simpleMessageListenerContainer() { 
     final SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory(); 
     factory.setAutoStartup(false); 
     factory.setAmazonSqs(amazonSQSAsync()); 
     final SimpleMessageListenerContainer simpleMessageListenerContainer = factory 
       .createSimpleMessageListenerContainer(); 
     simpleMessageListenerContainer.setMessageHandler(messageHandler()); 
     return simpleMessageListenerContainer; 
    } 

    @Bean(name = "messageHandler") 
    public QueueMessageHandler messageHandler() { 
     return mock(QueueMessageHandler.class); 
    } 

    @Bean(name = "amazonSQSAsync") 
    public AmazonSQSAsync amazonSQSAsync() { 
     return mock(AmazonSQSAsync.class); 
    } 
} 
+0

クラスパスリソース –

+0

で定義されたエラー名でBeanを作成する「simpleMessageListenerContainer」あなたのコードはありませんし、それが問題を解決する方法を何の説明を追加してください。コードのみの回答は良い習慣とはみなされません(ドキュメントを参照) – Yannis

関連する問題