模拟或模拟消息队列 (JMS)

2022-09-01 19:28:10

有一条消息(文本),我绝对知道的格式和内容。
现在,Java中的类,从文件中解析和读取此消息,已实现。

在现实世界中,此消息将来自消息队列。

现在,我应该在本地PC上模拟,模拟或生成消息队列以进行测试。

Java spec(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提供程序

JMS 客户端 - 它是我的类,用于读取消息。
消息本身我知道。

那么问题是如何启动消息队列?
如何从Java代码中以编程方式模拟它?我能以某种方式嘲笑它吗?

谢谢。


答案 1

要在实际生产 JMS 提供程序不可用时隔离测试应用程序,可以使用以下方法之一:

  1. JMS模拟:
    在测试应用程序时,您可以使用测试替身来模拟不存在的依赖项。您可以使用 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 类的交互。该解决方案附带了单元测试的所有权衡。有关这些内容的详细信息,请参阅测试金字塔

如果要对应用程序进行黑盒测试,请使用我上面描述的解决方案之一。


答案 2

如果您使用Spring Integration,则可以轻松完成此操作。它有一个非常基本的,抽象的“通道”实现。您可以创建和测试您的生产者和消费者,当您准备更进一步时,您只需在通道顶部指定一个 JMS 适配器。


推荐