Giriş
Şu satırı dahil ederiz
import org.apache.activemq.artemis.junit.EmbeddedActiveMQResource;
Açıklaması şöyle
Run a Server, without the JMS manager
Açıklaması şöyle
EmbeddedActiveMQResource is a class provided by the artemis-junit dependency, which allows you to easily set up an embedded ActiveMQ Artemis server for unit testing.
Maven
Şu satırı dahil ederiz.
1. artemis-jakarta-server birim test içinde ActiveMQConnectionFactory gibi sınıfları kullanmak için gerekir. Yani parent POM gibi düşünülebilir. Kodu burada. İçinden artemis-junit çıkmıyor. Dolayısıyla bunu eklemek lazım
2. artemis-junit içinde bazı şeyleri dışarıda bırakmak gerekiyor, çünkü bu kütüphane güncellenmemiş ve javax.jms isim alanındaki sınıfları da getiriyor. Ama biz jakarta.jms isim alanını kullanmak istiyoruz
<dependency><groupId>org.apache.activemq</groupId><artifactId>artemis-jakarta-server</artifactId><version>5.15.11</version><type>pom</type><scope>test</scope></dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>artemis-junit</artifactId><version>5.15.11</version><scope>test</scope><!-- Exclude dependencies that bring in jms namespace --><exclusions><exclusion><groupId>org.apache.activemq</groupId><artifactId>artemis-jms-client</artifactId></exclusion></exclusions></dependency>
createQueue metodu
Örnek
JUnit4 ile şöyle yaparız
public class MyTest { @Rule public EmbeddedActiveMQResource server = new EmbeddedActiveMQResource(); @Test public void myTest() { // test something, eg. create a queue server.createQueue("test.adress", "test.queue"); } }
JUnit5 ile şöyle yaparız
public class MyTest { @RegisterExtension public EmbeddedActiveMQExtension server = new EmbeddedActiveMQExtension(); @Test public void myTest() { // test something, eg. create a queue server.createQueue("test.adress", "test.queue"); } }
getVmURL metodu
Örnek
Şöyle yaparız. Burada createSession(false,Session.AUTO_ACKNOWLEDGE) ile transaction kullanmayan ve hemen onaylanan bir Session başlatılıyor
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.apache.activemq.junit.EmbeddedActiveMQBroker; import jakarta.jms.Connection; import jakarta.jms.ConnectionFactory; import jakarta.jms.JMSException; import jakarta.jms.MessageProducer; import jakarta.jms.Queue; import jakarta.jms.Session; import jakarta.jms.TextMessage; import static org.junit.Assert.assertNotNull; public class ArtemisUnitTest { @Rule public EmbeddedActiveMQBroker broker = new EmbeddedActiveMQBroker(); @Test public void testSendMessage() throws JMSException { ConnectionFactory connectionFactory = createConnectionFactory(); try (Connection connection = connectionFactory.createConnection()) { Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Queue queue = session.createQueue("exampleQueue"); MessageProducer producer = session.createProducer(queue); TextMessage message = session.createTextMessage(); message.setText("Hello, Artemis!"); producer.send(message); // Verify that the message was sent successfully assertNotNull(message.getJMSMessageID()); } } private ConnectionFactory createConnectionFactory() { String brokerUrl = broker.getVmURL();
return new ActiveMQConnectionFactory(brokerUrl); } }
Örnek
Şöyle yaparız. Burada createSession(false,Session.DUPS_OK_ACKNOWLEDGE) ile transaction kullanmayan ve mesajların çift gelebileceği bir Session başlatılıyor
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.apache.activemq.artemis.jms.client.ActiveMQXAConnectionFactory; import org.apache.activemq.junit.EmbeddedActiveMQBroker; import jakarta.jms.Connection; import jakarta.jms.ConnectionFactory; import jakarta.jms.JMSException; import jakarta.jms.Message; import jakarta.jms.MessageConsumer; import jakarta.jms.Session; import jakarta.jms.TextMessage; public class ArtemisUnitTest { @ClassRule public static EmbeddedActiveMQResource broker = new EmbeddedActiveMQResource(); @Test public void foo () { try ( Connection connection = new ActiveMQConnectionFactory(broker.getVmURL()) .createConnection(); Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE); MessageConsumer consumer = session .createConsumer(session.createQueue(destinationName)) ) { ... }); } }