blob: 753a0b7189b4ddf664962786eb000198e72937ad [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.18">
<link rel="icon" type="image/png" href="images/favicon.png">
<title>Unit Testing</title>
<link rel="stylesheet" href="css/asciidoctor.css">
<link rel="stylesheet" href="css/font-awesome.css">
<link rel="stylesheet" href="css/rouge-github.css">
</head>
<body class="book toc2 toc-left">
<div id="header">
<h1>Unit Testing</h1>
<div id="toc" class="toc2">
<div id="toctitle"><a href="index.html">User Manual for 2.33.0</a></div>
<ul class="sectlevel1">
<li><a href="#examples">1. Examples</a>
<ul class="sectlevel2">
<li><a href="#junit-4">1.1. JUnit 4</a></li>
<li><a href="#junit-5">1.2. JUnit 5</a></li>
</ul>
</li>
<li><a href="#ordering-rules-extensions">2. Ordering rules / extensions</a>
<ul class="sectlevel2">
<li><a href="#junit-4-2">2.1. JUnit 4</a></li>
<li><a href="#junit-5-2">2.2. JUnit 5</a></li>
</ul>
</li>
<li><a href="#available-rules-extensions">3. Available Rules / Extensions</a></li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Artemis resources can be run inside JUnit Tests by using provided Rules (for JUnit 4) or Extensions (for JUnit 5).
This can make it easier to embed messaging functionality in your tests.</p>
</div>
<div class="paragraph">
<p>These are provided by the packages <code>artemis-junit</code> (JUnit 4) and <code>artemis-junit-5</code> (JUnit 5).</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="examples"><a class="anchor" href="#examples"></a><a class="link" href="#examples">1. Examples</a></h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="junit-4"><a class="anchor" href="#junit-4"></a><a class="link" href="#junit-4">1.1. JUnit 4</a></h3>
<div class="sect3">
<h4 id="add-maven-dependency"><a class="anchor" href="#add-maven-dependency"></a><a class="link" href="#add-maven-dependency">1.1.1. Add Maven dependency</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight nowrap"><code data-lang="xml"><span class="nt">&lt;dependency&gt;</span>
<span class="nt">&lt;groupId&gt;</span>org.apache.activemq<span class="nt">&lt;/groupId&gt;</span>
<span class="nt">&lt;artifactId&gt;</span>artemis-junit<span class="nt">&lt;/artifactId&gt;</span>
<span class="c">&lt;!-- replace this for the version you are using -&#8594;</span>
<span class="nt">&lt;version&gt;</span>2.33.0<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;scope&gt;</span>test<span class="nt">&lt;/scope&gt;</span>
<span class="nt">&lt;/dependency&gt;</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="declare-a-rule-on-your-junit-test"><a class="anchor" href="#declare-a-rule-on-your-junit-test"></a><a class="link" href="#declare-a-rule-on-your-junit-test">1.1.2. Declare a rule on your JUnit Test</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight nowrap"><code data-lang="java"><span class="kn">import</span> <span class="nn">org.apache.activemq.artemis.junit.EmbeddedActiveMQResource</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.junit.Rule</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.junit.Test</span><span class="o">;</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyTest</span> <span class="o">{</span>
<span class="nd">@Rule</span>
<span class="kd">public</span> <span class="nc">EmbeddedActiveMQResource</span> <span class="n">server</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">EmbeddedActiveMQResource</span><span class="o">();</span>
<span class="nd">@Test</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">myTest</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// test something, eg. create a queue</span>
<span class="n">server</span><span class="o">.</span><span class="na">createQueue</span><span class="o">(</span><span class="s">"test.adress"</span><span class="o">,</span> <span class="s">"test.queue"</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span></code></pre>
</div>
</div>
</div>
</div>
<div class="sect2">
<h3 id="junit-5"><a class="anchor" href="#junit-5"></a><a class="link" href="#junit-5">1.2. JUnit 5</a></h3>
<div class="sect3">
<h4 id="add-maven-dependency-2"><a class="anchor" href="#add-maven-dependency-2"></a><a class="link" href="#add-maven-dependency-2">1.2.1. Add Maven dependency</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight nowrap"><code data-lang="xml"><span class="nt">&lt;dependency&gt;</span>
<span class="nt">&lt;groupId&gt;</span>org.apache.activemq<span class="nt">&lt;/groupId&gt;</span>
<span class="nt">&lt;artifactId&gt;</span>artemis-junit-5<span class="nt">&lt;/artifactId&gt;</span>
<span class="c">&lt;!-- replace this for the version you are using -&#8594;</span>
<span class="nt">&lt;version&gt;</span>2.33.0<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;scope&gt;</span>test<span class="nt">&lt;/scope&gt;</span>
<span class="nt">&lt;/dependency&gt;</span></code></pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="declare-a-rule-on-your-junit-test-2"><a class="anchor" href="#declare-a-rule-on-your-junit-test-2"></a><a class="link" href="#declare-a-rule-on-your-junit-test-2">1.2.2. Declare a rule on your JUnit Test</a></h4>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight nowrap"><code data-lang="java"><span class="kn">import</span> <span class="nn">org.apache.activemq.artemis.junit.EmbeddedActiveMQExtension</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.junit.jupiter.api.Test</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.junit.jupiter.api.extension.RegisterExtension</span><span class="o">;</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyTest</span> <span class="o">{</span>
<span class="nd">@RegisterExtension</span>
<span class="kd">public</span> <span class="nc">EmbeddedActiveMQExtension</span> <span class="n">server</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">EmbeddedActiveMQExtension</span><span class="o">();</span>
<span class="nd">@Test</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">myTest</span><span class="o">()</span> <span class="o">{</span>
<span class="c1">// test something, eg. create a queue</span>
<span class="n">server</span><span class="o">.</span><span class="na">createQueue</span><span class="o">(</span><span class="s">"test.adress"</span><span class="o">,</span> <span class="s">"test.queue"</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="ordering-rules-extensions"><a class="anchor" href="#ordering-rules-extensions"></a><a class="link" href="#ordering-rules-extensions">2. Ordering rules / extensions</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>This is actually a JUnit feature, but this could be helpful on pre-determining the order on which rules are executed.</p>
</div>
<div class="sect2">
<h3 id="junit-4-2"><a class="anchor" href="#junit-4-2"></a><a class="link" href="#junit-4-2">2.1. JUnit 4</a></h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight nowrap"><code data-lang="java"><span class="kn">import</span> <span class="nn">org.junit.Rule</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.junit.rules.RuleChain</span><span class="o">;</span>
<span class="kd">public</span> <span class="nc">EmbeddedActiveMQResource</span> <span class="n">server</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">EmbeddedActiveMQResource</span><span class="o">();</span>
<span class="kd">public</span> <span class="nc">ActiveMQDynamicProducerResource</span> <span class="n">producer</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ActiveMQDynamicProducerResource</span><span class="o">(</span><span class="n">server</span><span class="o">.</span><span class="na">getVmURL</span><span class="o">());</span>
<span class="nd">@Rule</span>
<span class="kd">public</span> <span class="nc">RuleChain</span> <span class="n">ruleChain</span> <span class="o">=</span> <span class="nc">RuleChain</span><span class="o">.</span><span class="na">outerRule</span><span class="o">(</span><span class="n">server</span><span class="o">).</span><span class="na">around</span><span class="o">(</span><span class="n">producer</span><span class="o">);</span></code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="junit-5-2"><a class="anchor" href="#junit-5-2"></a><a class="link" href="#junit-5-2">2.2. JUnit 5</a></h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight nowrap"><code data-lang="java"><span class="kn">import</span> <span class="nn">org.junit.jupiter.api.Order</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.junit.jupiter.api.extension.RegisterExtension</span><span class="o">;</span>
<span class="nd">@RegisterExtension</span>
<span class="nd">@Order</span><span class="o">(</span><span class="mi">1</span><span class="o">)</span>
<span class="kd">public</span> <span class="nc">EmbeddedActiveMQExtension</span> <span class="n">producer</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">EmbeddedActiveMQExtension</span><span class="o">();</span>
<span class="nd">@RegisterExtension</span>
<span class="nd">@Order</span><span class="o">(</span><span class="mi">2</span><span class="o">)</span>
<span class="kd">public</span> <span class="nc">ActiveMQDynamicProducerExtension</span> <span class="n">producer</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ActiveMQDynamicProducerExtension</span><span class="o">(</span><span class="n">server</span><span class="o">.</span><span class="na">getVmURL</span><span class="o">());</span></code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="available-rules-extensions"><a class="anchor" href="#available-rules-extensions"></a><a class="link" href="#available-rules-extensions">3. Available Rules / Extensions</a></h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">JUnit 4 Rule</th>
<th class="tableblock halign-left valign-top">JUnit 5 Extension</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EmbeddedActiveMQResource</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">EmbeddedActiveMQExtension</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Run a Server, without the JMS manager</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><span class="line-through">EmbeddedJMSResource</span> (deprecated)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">no equivalent</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Run a Server, including the JMS Manager</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ActiveMQConsumerResource</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ActiveMQConsumerExtension</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Automate the creation of a consumer</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ActiveMQDynamicProducerResource</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ActiveMQDynamicProducerExtension</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Automate the creation of a producer</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ActiveMQProducerResource</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ActiveMQProducerExtension</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Automate the creation of a producer</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>