我有一個彈簧啓動應用程序,它不比通過具有@ SqsListener註釋方法的組件「MessageHandler」偵聽SQS隊列啓動一些工作當一條消息到達時。如何在模塊/集成測試中禁用Spring SQS處理程序
由於我們想通過生產中的http獲取健康狀態和度量,因此還存在引導啓動器 - Web依賴關係。
現在我想寫一個模塊測試,它已經有一個應用程序上下文和autowires bean。我也發現瞭如何禁用不需要通過測試Web服務器:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = NONE)
然而,MessageHandler的豆也被實例化,並嘗試連接到AWS,我想這要防止的。
一個解決方案,工程是有@Primary註解,它的handleMessage方法不具有@SqsListener註釋中的src/test/java下一個測試實施:
@Component
@Primary
public class TestMessageHandler implements MessageHandler {
@Override
public void handleMessage(final NewMessage newMessage) throws Exception {
return null;
}
}
但現在我想還測試(真正的)MessageHandler bean,這意味着,我希望Spring實例化它並自動裝載它的依賴項,但是我仍然不希望@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來自Spring-cloud-aws-starter模塊的魔法,它爲RealMessageHandler中的handleMessage方法設置SQS偵聽器。
任何線索我會怎麼做?
造成的:org.springframework.beans.factory.BeanCreationException:錯誤創建名稱爲豆「SimpleMessageListenerContainer一樣」在類路徑資源 –
請添加你的代碼做什麼解釋,以及如何解決問題的定義。僅有代碼的答案不被認爲是好的做法(請參閱文檔) – Yannis