2010-10-19 13 views
14

Hay un mensaje (texto), cuyo formato y contenido definitivamente conozco.
Por ahora, se implementa la clase en Java, que analiza y lee este mensaje desde el archivo.Simular o simular Message Queue (JMS)

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

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

especificación 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 de JMS .

Cliente JMS -es mi clase que lee el mensaje.
Mensaje en sí mismo, sé.

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

Gracias.

+1

¿Por qué ir a ese problema? ¿Por qué no simplemente instalar un proveedor local de JMS en su estación de trabajo y usarlo? Puede descargar versiones de código abierto y versiones de prueba de proveedores proveedores de JMS. Dado que se trata de JMS, cualquier implementación compatible funcionará para las pruebas unitarias. –

+0

Eso es lo que pido, entonces necesito instalar el proveedor de JMS. ¿Qué podrías aconsejarme? gracias – sergionni

+0

Bueno, soy un IBMer así que tengo que sugerir la versión de prueba de WMQ. :-) Pero veo que ya has encontrado ActiveMQ que puedes usar para el desarrollo sin que expire. Por otro lado, sea lo que sea lo que use en producción, lo mejor sería desarrollarlo, así que pase a eso una vez que sepa cuál será. –

Respuesta

5

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

1

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 independiente, implementar una capa de delegación que uniría JMS con su bean. Con dicho diseño puede probar su bean de forma aislada de JMS y luego realizar una prueba del sistema que probaría toda la integración con el sistema JMS real.

En cuanto a los JMS en proceso, puede consultar SomnifugiJMS.

+28

Estoy completamente en desacuerdo. Burlarse de un sistema externo es fundamental para las pruebas unitarias, especialmente si confía en una interfaz externa y no desea convertir sus pruebas unitarias en pruebas de integración. –

+0

@ank - Es * una * mala práctica para burlarse de un sistema externo. La solución es crear una interfaz para ese sistema dentro de su propia aplicación (el bean al que se refiere Eugene Kuleshov) que maneja la comunicación con el sistema externo, y luego en la prueba, se burla de * that *. Intentar burlarse de todo el sistema externo es costoso y complicado. – Ickster

+2

@Ickster esa es la definición de un simulacro ... (Sé que esto es bastante antiguo, pero) ¿puedes dar un ejemplo de la distinción que crees que estás haciendo? – davemyron

-1

En general, estoy de acuerdo con Eugene Kuleshov. Pero si todavía necesitas esa 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.

+0

Acabo de encontrar Apache ActiveMQ. Intentando esto por primera vez. – sergionni

1

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

  1. JMS simulacros: Al probar sus aplicaciones se puede simular las dependencias no existentes utilizando test doubles. Puede utilizar un simulacro JMS que simulará el comportamiento de un proveedor JMS real. API simulation tools le permitirá crear simulaciones JMS (simplemente elija una herramienta compatible con JMS, por ejemplo Traffic Parrot). Usar un simulacro JMS le permitirá un alto nivel de flexibilidad durante las pruebas. Podrá probar escenarios de prueba típicos de producción, pero también situaciones hipotéticas configurando su 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 los proveedores reales de JMS. Eche un vistazo a this introduction video to JMS service virtualization for ActiveMq (la virtualización del servicio es un nombre diferente para un simulacro) o this one for 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. JMS instancia de prueba proveedor: Se puede ejecutar un proveedor de JMS en su ordenador portátil o en una de sus entornos de prueba y conecte su aplicación a la que en lugar del proveedor de producción. Cuando utiliza proveedores de código abierto en producción como ActiveMQ o RabbitMQ, también debería ser fácil ejecutar uno de ellos en su computadora portátil, ya que son livianos y gratuitos. Para IBM Websphere MQ, puede usar el IBM MQ for Developers gratuito.

  3. JMS simulacro de clase: Puede utilizar Mockito en pruebas unitarias a las interacciones simuladas con clases JMS. Esta solución viene con todas las ventajas y desventajas de las pruebas unitarias. Para obtener más información sobre estos, consulte testing pyramid. Si desea probar su aplicación en negro, use una de las soluciones que he descrito anteriormente.