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

自动创建生产者