Artemis 資源可以使用提供的規則 (用於 JUnit 4) 或擴展 (用於 JUnit 5) 在 JUnit 測試中執行。這可以更容易地在您的測試中嵌入訊息傳遞功能。

這些是由 artemis-junit (JUnit 4) 和 artemis-junit-5 (JUnit 5) 套件提供。

1. 範例

1.1. JUnit 4

1.1.1. 新增 Maven 依賴

<dependency>
   <groupId>org.apache.activemq</groupId>
   <artifactId>artemis-junit</artifactId>
   <!-- replace this for the version you are using -→
   <version>2.38.0</version>
   <scope>test</scope>
</dependency>

1.1.2. 在您的 JUnit 測試中宣告規則

import org.apache.activemq.artemis.junit.EmbeddedActiveMQResource;
import org.junit.Rule;
import org.junit.Test;

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");
   }
}

1.2. JUnit 5

1.2.1. 新增 Maven 依賴

<dependency>
   <groupId>org.apache.activemq</groupId>
   <artifactId>artemis-junit-5</artifactId>
   <!-- replace this for the version you are using -→
   <version>2.38.0</version>
   <scope>test</scope>
</dependency>

1.2.2. 在您的 JUnit 測試中宣告規則

import org.apache.activemq.artemis.junit.EmbeddedActiveMQExtension;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

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");
   }
}

2. 排序規則/擴展

這實際上是 JUnit 的功能,但這有助於預先確定規則的執行順序。

2.1. JUnit 4

import org.junit.Rule;
import org.junit.rules.RuleChain;

public EmbeddedActiveMQResource server = new EmbeddedActiveMQResource();
public ActiveMQDynamicProducerResource producer = new ActiveMQDynamicProducerResource(server.getVmURL());

@Rule
public RuleChain ruleChain = RuleChain.outerRule(server).around(producer);

2.2. JUnit 5

import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.extension.RegisterExtension;

@RegisterExtension
@Order(1)
public EmbeddedActiveMQExtension producer = new EmbeddedActiveMQExtension();

@RegisterExtension
@Order(2)
public ActiveMQDynamicProducerExtension producer = new ActiveMQDynamicProducerExtension(server.getVmURL());

3. 可用的規則/擴展

JUnit 4 規則 JUnit 5 擴展 描述

EmbeddedActiveMQResource

EmbeddedActiveMQExtension

執行伺服器,不含 JMS 管理器

EmbeddedJMSResource (已棄用)

無對應項

執行伺服器,包含 JMS 管理器

ActiveMQConsumerResource

ActiveMQConsumerExtension

自動化建立消費者

ActiveMQDynamicProducerResource

ActiveMQDynamicProducerExtension

自動化建立生產者

ActiveMQProducerResource

ActiveMQProducerExtension

自動化建立生產者