[英]Mock or simulate Message Queue (JMS)
有一條消息(文本),我肯定知道哪種格式和內容。
現在,實現了從文件中解析和讀取此消息的 Java 類。
在現實世界中,此消息將來自 Message Queue。
現在,我應該在本地 PC 上模擬、模擬或生成消息隊列以進行測試。
Java規范( java jms ):
JMS provider: A messaging system that implements the JMS specification.
JMS clients: Java applications that send and receive messages.
Messages: Objects that are used to communicate information between JMS clients.
關於這個規范,我需要JMS provider 。
JMS 客戶端- 這是我的類讀取消息。
消息本身我知道。
那么問題來了,如何啟動消息隊列呢?
我如何從 Java 代碼以編程方式模擬它? 我可以以某種方式嘲笑它嗎?
謝謝。
要在真正的生產 JMS 提供程序不可用時單獨測試應用程序,您可以使用以下方法之一:
JMS 模擬:
在測試應用程序時,您可以使用test doubles模擬不存在的依賴項。 您可以使用 JMS 模擬來模擬真實 JMS 提供程序的行為。 API 模擬工具將允許您創建 JMS 模擬(只需選擇支持 JMS 的工具,例如Traffic Parrot )。 使用 JMS 模擬將使您在測試期間具有高度的靈活性。 通過設置模擬以返回幾乎任何類型的消息,您將能夠測試典型的類似生產的測試場景以及假設的情況。 您還可以模擬不同類型的錯誤,這對於真正的 JMS 提供者來說通常是很難做到的。 看一下ActiveMq 的 JMS 服務虛擬化介紹視頻(服務虛擬化是模擬的不同名稱)或IBM MQ 的這個介紹視頻。 請注意,這些視頻來自 Traffic Parrot,但其中描述的原則適用於您選擇的任何工具。
JMS 提供程序測試實例:
您可以在您的筆記本電腦或您的測試環境之一中運行 JMS 提供程序,並將您的應用程序連接到它而不是生產提供程序。 當您在生產中使用 ActiveMQ 或 RabbitMQ 等開源提供程序時,在您的筆記本電腦上運行其中之一應該也很容易,因為它們是輕量級且免費的。 對於 IBM Websphere MQ,您可以使用免費的IBM MQ for Developers 。
JMS 類模擬:
您可以在單元測試中使用Mockito來模擬與 JMS 類的交互。 該解決方案伴隨着單元測試的所有權衡。 有關這些的更多信息,請參閱測試金字塔。
如果您想對您的應用程序進行黑盒測試,請使用我上面描述的解決方案之一。
如果您使用Spring Integration ,您可以很容易地做到這一點。 它有一個非常基本的、抽象的“通道”實現。 您可以創建和測試您的生產者和消費者,當您准備更進一步時,您只需在您的頻道之上指定一個 JMS 適配器。
通常,模擬或模擬外部系統(例如 JMS)是一種不好的做法。 更好的想法是將您的邏輯抽象為一個獨立的 bean,實現一個將 JMS 與您的 bean 橋接的委托層。 通過這樣的設計,您可以獨立於 JMS 測試您的 bean,然后進行系統測試,以測試與真實 JMS 系統的整個集成。
至於進程內 JMS,您可以查看SomnifugiJMS 。
總的來說,我同意 Eugene Kuleshov 的觀點。 但是如果你仍然需要這樣的模擬,我建議你使用 java.util.concurent 包中的 BlckingQueue 。 我覺得用 javax.jms.Queue 接口包裝起來問題不大。 順便說一句,對於某種開源項目來說,這是一個好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.