簡體   English   中英

模擬或模擬消息隊列 (JMS)

[英]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 提供程序不可用時單獨測試應用程序,您可以使用以下方法之一:

  1. JMS 模擬:
    在測試應用程序時,您可以使用test doubles模擬不存在的依賴 您可以使用 JMS 模擬來模擬真實 JMS 提供程序的行為。 API 模擬工具將允許您創建 JMS 模擬(只需選擇支持 JMS 的工具,例如Traffic Parrot )。 使用 JMS 模擬將使您在測試期間具有高度的靈活性。 通過設置模擬以返回幾乎任何類型的消息,您將能夠測試典型的類似生產的測試場景以及假設的情況。 您還可以模擬不同類型的錯誤,這對於真正的 JMS 提供者來說通常是很難做到的。 看一下ActiveMq 的 JMS 服務虛擬化介紹視頻(服務虛擬化是模擬的不同名稱)或IBM MQ 的這個介紹視頻 請注意,這些視頻來自 Traffic Parrot,但其中描述的原則適用於您選擇的任何工具。

  2. JMS 提供程序測試實例:
    您可以在您的筆記本電腦或您的測試環境之一中運行 JMS 提供程序,並將您的應用程序連接到它而不是生產提供程序。 當您在生產中使用 ActiveMQ 或 RabbitMQ 等開源提供程序時,在您的筆記本電腦上運行其中之一應該也很容易,因為它們是輕量級且免費的。 對於 IBM Websphere MQ,您可以使用免費的IBM MQ for Developers

  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM