| <!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.31.1</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"><dependency></span> |
| <span class="nt"><groupId></span>org.apache.activemq<span class="nt"></groupId></span> |
| <span class="nt"><artifactId></span>artemis-junit<span class="nt"></artifactId></span> |
| <span class="c"><!-- replace this for the version you are using -→</span> |
| <span class="nt"><version></span>2.31.1<span class="nt"></version></span> |
| <span class="nt"><scope></span>test<span class="nt"></scope></span> |
| <span class="nt"></dependency></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"><dependency></span> |
| <span class="nt"><groupId></span>org.apache.activemq<span class="nt"></groupId></span> |
| <span class="nt"><artifactId></span>artemis-junit-5<span class="nt"></artifactId></span> |
| <span class="c"><!-- replace this for the version you are using -→</span> |
| <span class="nt"><version></span>2.31.1<span class="nt"></version></span> |
| <span class="nt"><scope></span>test<span class="nt"></scope></span> |
| <span class="nt"></dependency></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> |