有一个消息(文本),其格式和内容我肯定知道.
现在,Java中的类实现了从文件中解析和读取此消息。
在真实的世界中,此消息将来自消息队列。
现在,我应该在本地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提供者***。
- JMS客户端 *-这是我的类,读取消息。
“我知道,我知道。”
那么问题是如何启动消息队列?
如何从Java代码中模拟它?我能以某种方式嘲笑它吗?
谢谢
5条答案
按热度按时间uxh89sit1#
要在实际生产JMS提供程序不可用时隔离测试应用程序,您可以使用以下方法之一:
1.* * JMS mock:**
在测试应用程序时,您可以使用test doubles模拟不存在的依赖项。您可以使用JMS mock来模拟真实JMS提供者的行为。API simulation tools将允许您创建JMS模拟(只需选择一个支持JMS的工具,例如Traffic Parrot)。使用JMS模拟将允许您在测试期间获得高度的灵活性。您将能够测试典型的类似生产的测试场景,但也可以通过设置mock返回几乎任何类型的消息来测试假设的情况。您还可以模拟不同类型的错误,这通常很难用真正的JMS提供程序来实现。看看this introduction video to JMS service virtualization for ActiveMq(服务虚拟化是模拟的另一个名称)或this one for IBM MQ。请注意,这些视频来自Traffic Parrot,但其中描述的原理适用于您选择的任何工具。
1.* * JMS提供者测试示例:**
您可以在笔记本电脑或测试环境中运行JMS提供程序,并将应用程序连接到它,而不是生产提供程序。当您在生产环境中使用开源提供程序(如ActiveMQ或RabbitMQ)时,应该很容易在笔记本电脑上运行其中一个,因为它们是轻量级和免费的。对于IBM Websphere MQ,您可以使用免费的IBM MQ for Developers。
1.* * JMS类mock:**
您可以在单元测试中使用Mockito来模拟与JMS类的交互。这个解决方案包含了单元测试的所有折衷。有关这些的更多信息,请参见testing pyramid。
如果您希望对应用程序进行黑盒测试,请使用我上面描述的解决方案之一。
rggaifut2#
如果你使用Spring Integration,你可以很容易地做到这一点。它有一个非常基本、抽象的“通道”实现。您可以创建并测试生产者和消费者,当您准备好进一步时,您只需在Channel之上指定一个JMS适配器。
tkclm6bt3#
通常,模拟或模仿外部系统(如JMS)是一种不好的做法。一个更好的想法是将您的逻辑抽象到一个独立的bean中,实现一个将JMS与您的bean连接起来的委托层。通过这样的设计,您可以在与JMS隔离的情况下测试bean,然后进行系统测试,测试与真实的JMS系统的整个集成。
至于进程内JMS,您可以查看SomnifugiJMS。
o4hqfura4#
同时,几乎每个MessageBroker都有一个只能在JVM中运行的嵌入式版本。因此,您可以使用它来进行测试,而不是依赖外部JMS代理。
alen0pnh5#
总的来说,我同意尤金Kuleshov的观点。但是如果你仍然需要这样的模拟,我建议你使用java.util.concurrent包中的BlckingQueue。我认为用javax.jms.Queue接口 Package 它不是什么大问题。顺便说一句,对于某种开源项目来说,这是一个好主意。