testing - ActiveMQ 的测试用例

标签 testing jakarta-ee junit jms activemq

我想知道如何根据建议使用 ActiveMQ 进行测试的答案使用 ActiveMQ 测试 JMS Simulating JMS - jUnit

但是,我没有从 MessageConsumer 收到我期望的消息。如果我使用 receive,它就卡在那里。

这是我的代码

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.Assert;
import org.junit.Test;

public class JmsTest {
@Test
public void test() throws Exception {
    final ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
            "vm://localhost?broker.persistent=true");
    final Queue queue;
    final Connection connection = connectionFactory.createConnection();
    final Session session = connection.createSession(true,
            Session.AUTO_ACKNOWLEDGE);
    {
        queue = session.createQueue("test");
    }
    {
        final MessageProducer producer = session.createProducer(queue);
        final TextMessage message = session.createTextMessage("testing");
        producer.send(message);
    }
    {
        final MessageConsumer consumer = session.createConsumer(queue);
        final TextMessage message = (TextMessage) consumer.receiveNoWait();
        // "message" is null at this point
        Assert.assertEquals("testing", message.getText());
    }
}
}

最佳答案

谢谢蒂姆,我们大约在同一时间找到了它,但我不得不按照我在评论中指定的方式进行一些其他修改。简而言之,我必须确保“transactional”属性为“false”,正如 Tim 指出的那样,我必须进行 connection.start() 调用。

@Test
public void test() throws Exception {
    final ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
            "vm://localhost?broker.persistent=false");

    final Connection connection = connectionFactory.createConnection();
    connection.start();
    final Session session = connection.createSession(false,
            Session.AUTO_ACKNOWLEDGE);
    final Queue queue = session.createTemporaryQueue();
    {
        final MessageProducer producer = session.createProducer(queue);
        final TextMessage message = session.createTextMessage("testing");
        producer.send(message);
    }
    {
        final MessageConsumer consumer = session.createConsumer(queue);
        final TextMessage message = (TextMessage) consumer.receiveNoWait();
        Assert.assertNotNull(message);
        Assert.assertEquals("testing", message.getText());
    }
}

关于testing - ActiveMQ 的测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10463492/

相关文章:

java - 如何测试从文件和路径读取(使用 junit)?

java - ExecutorService.execute() 静默退出 run() 方法

javascript - Jest : Error: Your test suite must contain at least one test

python - Tox、lib、lib64 和站点包

java - 在 Java EE 应用程序中锁定

java - RMI、EJB 和回调

testing - 您如何测试涉及通过电子邮件确认的用户流程?

php - 测试驱动开发和接口(interface)

jakarta-ee - 通过集合集相等性选择实体

java - 如何在 Eclipse 中使用 JUnit