在Mule Flow中访问ActiveMq的Java组件的单元测试

时间:2016-05-19 15:05:08

标签: unit-testing junit mule activemq mule-component

我有以下Java类,它从JMS队列中检索消息。这个类是在骡子流中调用的。关于我如何为这堂课写一个Junit,你能提供建议吗?我试图创建一个独立的经纪人,但我遇到了麻烦

public Object getMessages(final MuleEventContext eventContext)
{
    final String consumerID = eventContext.getMessage().getProperty("consumerID", PropertyScope.INVOCATION);
    final String messageSelector = "ConsumerID = '" + consumerID + "'";

    JmsConnector amqConnector = (JmsConnector) eventContext.getMuleContext().getRegistry().lookupConnector("Active_MQ");
    ConnectionFactory factory = amqConnector.getConnectionFactory();
    Connection connection = null;

    List<String> listOfMessages = null;

    try
    {
        connection = factory.createConnection();            

        //Consumer Settings
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Queue queue = session.createQueue(queuename");            
        MessageConsumer consumer = session.createConsumer(queue, messageSelector);            

        //Browser Settings
        Session sessionBrowser = amqConnector.getSession( false, false );
        Queue queueBrowser = sessionBrowser.createQueue( queuename );
        QueueBrowser qBrowser = sessionBrowser.createBrowser( queueBrowser, messageSelector );
        Enumeration<Message> enumeration = qBrowser.getEnumeration();
        connection.start();

        listOfMessages = new ArrayList<String>();           

        while (enumeration.hasMoreElements())
        {
            enumeration.nextElement();
            Message message = consumer.receive();
            TextMessage msg = (TextMessage) message;          
            listOfMessages.add(msg.getText());

         }



        //Close Browser Settings
        qBrowser.close(); sessionBrowser.close();
        //Close Consumer Settings
        consumer.close(); session.close();
        //Close Connection
        connection.close();
    }
    catch ( Exception e )
    {
        throw new RuntimeException("Unable to retrieve messages from Queue "+ e);
    }

}

1 个答案:

答案 0 :(得分:0)

您可以创建FunctionalTestCase,然后:

  • 通过调用方法直接测试该类,或
  • 通过调用流程

    来测试整个场景
    public class MessageServiceTest extends FunctionalTestCase {
    
        @Test
        public void testJavaClass() throws Exception {
            MuleEventContext eventContext = MuleTestUtils.getTestEventContext("", MessageExchangePattern.REQUEST_RESPONSE, muleContext); 
    
            MessageService messageService = new MessageService();
            assertNotNull(messageService.getMessages(eventContext));
        }
    
        @Test
        public void testFlow() throws Exception {
            MuleEvent event = runFlow("messageserviceFlow");
            MuleMessage message = event.getMessage();
    
            assertNotNull(message);
            assertNotNull(message.getPayload());
        }
    
        protected String getConfigResources() {
            return "messageservice.xml";
        }
    
    }