java mocking jms message-queue provider

java - Simular o simular Message Queue(JMS)



mocking message-queue (4)

En general estoy de acuerdo con Eugene Kuleshov. Pero si aún necesitas tal burla, te sugiero que uses BlckingQueue del paquete java.util.concurent. Creo que no es un gran problema envolverlo con la interfaz javax.jms.Queue. Por cierto, es una buena idea para algún tipo de proyecto de código abierto.

Hay un mensaje (texto), qué formato y contenido sé definitivamente.
Por ahora, se implementa la clase en Java, que analiza y lee este mensaje del archivo.

En el mundo real, este mensaje vendrá de Message Queue.

Por ahora debería simular, simular o generar Message Queue en mi PC local para realizar pruebas.

Especificaciones de 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.

En cuanto a esta especificación, necesito proveedor JMS .

Cliente JMS: es mi clase que lee el mensaje.
Mensaje en sí lo sé.

¿Entonces la pregunta es cómo iniciar la cola de mensajes?
¿Cómo puedo simularlo programáticamente desde el código Java? ¿Puedo burlarme de alguna manera?

Gracias.


En general, es una mala práctica simular o simular un sistema externo, como JMS. Una mejor idea sería abstraer su lógica en un bean autónomo, implementar una capa de delegación que uniría JMS con su bean. Con tal diseño, puede probar su bean en forma aislada de JMS y luego hacer una prueba del sistema que pruebe la integración completa con el sistema JMS real.

En cuanto a JMS en proceso, puede consultar SomnifugiJMS .


Para probar una aplicación de forma aislada cuando el proveedor de JMS de producción real no está disponible, puede utilizar uno de los siguientes:

  1. Simulacro de JMS: Al probar sus aplicaciones, puede simular las dependencias que no existen utilizando pruebas dobles . Puede utilizar un simulacro de JMS que simulará el comportamiento de un proveedor real de JMS. en.wikipedia.org/wiki/Comparison_of_API_simulation_tools le permitirán crear en.wikipedia.org/wiki/Comparison_of_API_simulation_tools JMS (solo elija una herramienta compatible con JMS, por ejemplo, Traffic Parrot ). El uso de un simulacro de JMS le permitirá un alto nivel de flexibilidad durante las pruebas. Podrás probar escenarios típicos de pruebas similares a la producción pero también situaciones hipotéticas configurando tu simulacro para devolver casi cualquier tipo de mensaje. También podrá simular diferentes tipos de errores, lo que a menudo es difícil de hacer con proveedores JMS reales. Eche un vistazo a este video de introducción a la virtualización del servicio JMS para ActiveMq (la virtualización del servicio es un nombre diferente para un simulacro) o este para IBM MQ . Tenga en cuenta que estos videos son de Traffic Parrot, pero el principio descrito allí se aplicará a cualquier herramienta que elija.

  2. Instancia de prueba del proveedor de JMS: puede ejecutar un proveedor de JMS en su computadora portátil o en uno de sus entornos de prueba y conectar su aplicación en lugar del proveedor de producción. Cuando utiliza proveedores de código abierto en producción como ActiveMQ o RabbitMQ, debería ser fácil ejecutar uno de ellos en su computadora portátil, ya que son ligeros y gratuitos. Para IBM Websphere MQ, puede utilizar la versión gratuita de IBM MQ for Developers .

  3. Simulacro de clase JMS: puedes usar Mockito en pruebas unitarias para Mockito interacciones con clases JMS. Esta solución viene con todas las ventajas y desventajas de las pruebas unitarias. Para obtener más información sobre los ver pirámide de prueba . Si desea probar su aplicación de caja negra, use una de las soluciones que he descrito anteriormente.


Si usa Spring Integration , puede hacerlo con bastante facilidad. Tiene una implementación muy básica, abstracta de "Canal". Puede crear y probar a sus productores y consumidores, y cuando esté listo para avanzar un paso más, simplemente especifique un adaptador JMS en la parte superior de su canal.