Modified: websites/production/camel/content/spring-testing.html
==============================================================================
--- websites/production/camel/content/spring-testing.html (original)
+++ websites/production/camel/content/spring-testing.html Sun Sep 21 16:18:59
2014
@@ -86,39 +86,10 @@
<tbody>
<tr>
<td valign="top" width="100%">
-<div class="wiki-content maincontent"><h2
id="SpringTesting-SpringTesting">Spring Testing</h2>
-
-<p><a shape="rect" href="testing.html">Testing</a> is a crucial part of any
development or integration work. The Spring Framework offers a number of
features that makes it easy to test while using Spring for Inversion of Control
which works with JUnit 3.x, JUnit 4.x, and <a shape="rect"
class="external-link" href="http://testng.org" rel="nofollow">TestNG</a>.</p>
-
-<p>We can use Spring for IoC and the Camel <a shape="rect"
href="mock.html">Mock</a> and <a shape="rect" href="test.html">Test</a>
endpoints to create sophisticated integration/unit tests that are easy to run
and debug inside your IDE.  There are three supported approaches for
testing with Spring in Camel.</p>
-<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p> Name </p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p> Testing Frameworks Supported </p></th><th
colspan="1" rowspan="1" class="confluenceTh"><p> Description </p></th><th
colspan="1" rowspan="1" class="confluenceTh"><p> Required Camel Test
Dependencies </p></th></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> CamelSpringTestSupport </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><ul><li>JUnit 3.x (deprecated)</li><li>JUnit
4.x</li><li>TestNG - <strong>Camel 2.8</strong></li></ul>
-</td><td colspan="1" rowspan="1" class="confluenceTd"><p> Provided by
org.apache.camel.test.CamelSpringTestSupport,
org.apache.camel.test.junit4.CamelSpringTestSupport, and
org.apache.camel.testng.CamelSpringTestSupport.  These base classes
provide <a shape="rect"
href="camel-test.html#CamelTest-FeaturesProvidedbyCamelTestSupport">feature
parity</a> with the simple CamelTestSupport classes from <a
shape="rect" href="camel-test.html">Camel Test</a> but do not support
Spring annotations on the test class such as
<strong>@Autowired</strong>, <strong>@DirtiesContext</strong>,
and <strong>@ContextConfiguration</strong>. <br clear="none"
class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><ul><li>JUnit 3.x (deprecated) -
camel-test-spring</li><li>JUnit 4.x - camel-test-spring</li><li>TestNG -
camel-test-ng</li></ul>
-</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> Plain
Spring Test <br clear="none" class="atl-forced-newline"> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><ul><li>JUnit 3.x</li><li>JUnit
4.x</li><li>TestNG</li></ul>
-</td><td colspan="1" rowspan="1" class="confluenceTd"><p> Extend the abstract
base classes
(org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests, org.springframework.test.context.junit38.AbstractJUnit4SpringContextTests,
etc.) provided in Spring Test or use the Spring Test JUnit4 runner.
 These approaches support both the Camel annotations and Spring
annotations, but do not have <a shape="rect"
href="camel-test.html#CamelTest-FeaturesProvidedbyCamelTestSupport">feature
parity</a> with org.apache.camel.test.CamelTestSupport,
org.apache.camel.test.junit4.CamelTestSupport, and
org.apache.camel.testng.CamelSpringTestSupport. <br clear="none"
class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><ul><li>JUnit 3.x (deprecated) - None</li><li>JUnit
4.x - None</li><li>TestNG - None</li></ul>
-</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> Camel
Enhanced Spring Test <br clear="none" class="atl-forced-newline"> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><ul><li>JUnit 4.x - <strong>Camel
2.10</strong></li><li>TestNG - <strong>Camel 2.10</strong></li></ul>
-</td><td colspan="1" rowspan="1" class="confluenceTd"><p> Use the
org.apache.camel.test.junit4.CamelSpringJUnit4ClassRunner runner with
the <strong>@RunWith</strong> annotation or extend
org.apache.camel.testng.AbstractCamelTestNGSpringContextTests to enable <a
shape="rect"
href="camel-test.html#CamelTest-FeaturesProvidedbyCamelTestSupport">feature
parity</a> with org.apache.camel.test.CamelTestSupport and
org.apache.camel.test.junit4.CamelTestSupport and also support the full suite
of Spring Test annotations such
as <strong>@Autowired</strong>, <strong>@DirtiesContext</strong>, and
<strong>@ContextConfiguration</strong>. </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><ul><li>JUnit 3.x (deprecated) -
camel-test-spring</li><li>JUnit 4.x - camel-test-spring</li><li>TestNG -
camel-test-ng</li></ul>
-</td></tr></tbody></table></div>
-
-
-<h3 id="SpringTesting-CamelSpringTestSupport">CamelSpringTestSupport</h3>
-
-<p>org.apache.camel.test.CamelSpringTestSupport,
org.apache.camel.test.junit4.CamelSpringTestSupport, and
org.apache.camel.testng.CamelSpringTestSupport extend their non-Spring
aware counterparts (org.apache.camel.test.CamelTestSupport,
org.apache.camel.test.junit4.CamelTestSupport, and
org.apache.camel.testng.CamelTestSupport) and deliver integration with Spring
into your test classes.  Instead of instantiating the
CamelContext and routes programmatically, these classes rely on a Spring
context to wire the needed components together.  If your test extends one
of these classes, you must provide the Spring context by implementing the
following method.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
-protected abstract AbstractApplicationContext createApplicationContext();
+<div class="wiki-content maincontent"><h2
id="SpringTesting-SpringTesting">Spring Testing</h2><p><a shape="rect"
href="testing.html">Testing</a> is a crucial part of any development or
integration work. The Spring Framework offers a number of features that makes
it easy to test while using Spring for Inversion of Control which works with
JUnit 3.x, JUnit 4.x, and <a shape="rect" class="external-link"
href="http://testng.org" rel="nofollow">TestNG</a>.</p><p>We can use Spring for
IoC and the Camel <a shape="rect" href="mock.html">Mock</a> and <a shape="rect"
href="test.html">Test</a> endpoints to create sophisticated integration/unit
tests that are easy to run and debug inside your IDE.  There are three
supported approaches for testing with Spring in Camel.</p><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Testing Frameworks Supported</p></th><t
h colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th
colspan="1" rowspan="1" class="confluenceTh"><p>Required Camel Test
Dependencies</p></th></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>CamelSpringTestSupport</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><ul><li>JUnit 3.x (deprecated)</li><li>JUnit
4.x</li><li>TestNG - <strong>Camel 2.8</strong></li></ul></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Provided by
org.apache.camel.test.CamelSpringTestSupport,
org.apache.camel.test.junit4.CamelSpringTestSupport, and
org.apache.camel.testng.CamelSpringTestSupport.  These base classes
provide <a shape="rect"
href="camel-test.html#CamelTest-FeaturesProvidedbyCamelTestSupport">feature
parity</a> with the simple CamelTestSupport classes from <a
shape="rect" href="camel-test.html">Camel Test</a> but do not support
Spring annotations on the test class such as
<strong>@Autowired</strong>, <strong>@DirtiesContex
t</strong>, and <strong>@ContextConfiguration</strong>.</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><ul><li>JUnit 3.x (deprecated) -
camel-test-spring</li><li>JUnit 4.x - camel-test-spring</li><li>TestNG -
camel-test-ng</li></ul></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Plain Spring Test</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><ul><li>JUnit 3.x</li><li>JUnit
4.x</li><li>TestNG</li></ul></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Extend the abstract base classes
(org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests, org.springframework.test.context.junit38.AbstractJUnit4SpringContextTests,
etc.) provided in Spring Test or use the Spring Test JUnit4 runner.
 These approaches support both the Camel annotations and Spring
annotations, but do not have <a shape="rect"
href="camel-test.html#CamelTest-FeaturesProvidedbyCamelTestSupport">feature
parity</a> with org.apache.ca
mel.test.CamelTestSupport, org.apache.camel.test.junit4.CamelTestSupport, and
org.apache.camel.testng.CamelSpringTestSupport.</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><ul><li>JUnit 3.x (deprecated) -
None</li><li>JUnit 4.x - None</li><li>TestNG -
None</li></ul></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Camel Enhanced Spring Test</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><ul><li>JUnit 4.x - <strong>Camel
2.10</strong></li><li>TestNG - <strong>Camel 2.10</strong></li></ul></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Use the
org.apache.camel.test.junit4.CamelSpringJUnit4ClassRunner runner with
the <strong>@RunWith</strong> annotation or extend
org.apache.camel.testng.AbstractCamelTestNGSpringContextTests to enable <a
shape="rect"
href="camel-test.html#CamelTest-FeaturesProvidedbyCamelTestSupport">feature
parity</a> with org.apache.camel.test.CamelTestSupport and
org.apache.camel.test.junit4.Camel
TestSupport and also support the full suite of Spring Test annotations such
as <strong>@Autowired</strong>, <strong>@DirtiesContext</strong>, and
<strong>@ContextConfiguration</strong>.</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><ul><li>JUnit 3.x (deprecated) -
camel-test-spring</li><li>JUnit 4.x - camel-test-spring</li><li>TestNG -
camel-test-ng</li></ul></td></tr></tbody></table></div><h3
id="SpringTesting-CamelSpringTestSupport">CamelSpringTestSupport</h3><p>org.apache.camel.test.CamelSpringTestSupport,
org.apache.camel.test.junit4.CamelSpringTestSupport, and
org.apache.camel.testng.CamelSpringTestSupport extend their non-Spring
aware counterparts (org.apache.camel.test.CamelTestSupport,
org.apache.camel.test.junit4.CamelTestSupport, and
org.apache.camel.testng.CamelTestSupport) and deliver integration with Spring
into your test classes.  Instead of instantiating the
CamelContext and routes programmatically, these classes rely on a
Spring context to wire the needed components together.  If your test
extends one of these classes, you must provide the Spring context by
implementing the following method.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[protected abstract AbstractApplicationContext
createApplicationContext();
]]></script>
-</div></div>
-<p>You are responsible for the instantiation of the Spring context in the
method implementation.  All of the features available in the non-Spring
aware counterparts from <a shape="rect" href="camel-test.html">Camel Test</a>
are available in your test.</p>
-
-<h3 id="SpringTesting-PlainSpringTest">Plain Spring Test</h3>
-
-<p>In this approach, your test classes directly inherit from the Spring Test
abstract test classes or use the JUnit 4.x test runner provided in Spring Test.
 This approach supports dependency injection into your test
class and the full suite of Spring Test annotations but does not support the
features provided by the CamelSpringTestSupport classes.</p>
-
-<h4 id="SpringTesting-PlainSpringTestusingJUnit3.xwithXMLConfigExample">Plain
Spring Test using JUnit 3.x with XML Config Example</h4>
-
-<p>Here is a simple unit test using JUnit 3.x support from Spring Test
using <a shape="rect" class="external-link"
href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/patterns/FilterTest.java">XML
Config</a>.</p>
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><p>You are responsible for the instantiation of the Spring context
in the method implementation.  All of the features available in the
non-Spring aware counterparts from <a shape="rect" href="camel-test.html">Camel
Test</a> are available in your test.</p><h3
id="SpringTesting-PlainSpringTest">Plain Spring Test</h3><p>In this approach,
your test classes directly inherit from the Spring Test abstract test classes
or use the JUnit 4.x test runner provided in Spring Test.  This approach
supports dependency injection into your test class and the full suite
of Spring Test annotations but does not support the features provided by the
CamelSpringTestSupport classes.</p><h4
id="SpringTesting-PlainSpringTestusingJUnit3.xwithXMLConfigExample">Plain
Spring Test using JUnit 3.x with XML Config Example</h4><p>Here is a simple
unit test using JUnit 3.x support from Spring Test using <a shape="rect"
class="external-link" href="http://svn.apache.org/repos/asf/cam
el/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/patterns/FilterTest.java">XML
Config</a>.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
@ContextConfiguration
public class FilterTest extends SpringRunWithTestSupport {
@@ -152,11 +123,7 @@ public class FilterTest extends SpringRu
}
}
]]></script>
-</div></div>
-<p>Notice that we use <strong>@DirtiesContext</strong> on the test
methods to force <a shape="rect" href="spring-testing.html">Spring
Testing</a> to automatically reload the <a shape="rect"
href="camelcontext.html">CamelContext</a> after each test method - this
ensures that the tests don't clash with each other (e.g. one test method
sending to an endpoint that is then reused in another test method).</p>
-
-<p>Also notice the use of <strong>@ContextConfiguration</strong> to
indicate that by default we should look for the <a shape="rect"
class="external-link"
href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/patterns/FilterTest-context.xml">FilterTest-context.xml
on the classpath</a> to configure the test case which looks like this</p>
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><p>Notice that we
use <strong>@DirtiesContext</strong> on the test methods to
force <a shape="rect" href="spring-testing.html">Spring
Testing</a> to automatically reload the <a shape="rect"
href="camelcontext.html">CamelContext</a> after each test method - this
ensures that the tests don't clash with each other (e.g. one test method
sending to an endpoint that is then reused in another test method).</p><p>Also
notice the use of <strong>@ContextConfiguration</strong> to indicate
that by default we should look for the <a shape="rect"
class="external-link"
href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/patterns/FilterTest-context.xml">FilterTest-context.xml
on the classpath</a> to configure the test case which looks like
this</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@@ -178,22 +145,11 @@ public class FilterTest extends SpringRu
</beans>
]]></script>
-</div></div>
-<p>This test will load a Spring XML configuration file
calledFilterTest-context.xml from the classpath in the same package
structure as the FilterTest class and initialize it along with any Camel routes
we define inside it, then inject theCamelContextinstance into our test case.</p>
-
-<p>For instance, like this maven folder layout:</p>
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
-src/test/java/org/apache/camel/spring/patterns/FilterTest.java
+</div></div><p>This test will load a Spring XML configuration file
calledFilterTest-context.xml from the classpath in the same package
structure as the FilterTest class and initialize it along with any Camel routes
we define inside it, then inject theCamelContextinstance into our test
case.</p><p>For instance, like this maven folder layout:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[src/test/java/org/apache/camel/spring/patterns/FilterTest.java
src/test/resources/org/apache/camel/spring/patterns/FilterTest-context.xml
]]></script>
-</div></div>
-
-<h4 id="SpringTesting-PlainSpringTestusingJUnit4.xwithJavaConfigExample">Plain
Spring Test using JUnit 4.x with Java Config Example</h4>
-
-<p>You can completely avoid using an XML configuration file by using <a
shape="rect" href="spring-java-config.html">Spring Java Config</a>.  Here
is a unit test using JUnit 4.x support from Spring Test using <a
shape="rect" class="external-link"
href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/patterns/FilterTest.java">Java
Config</a>.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><h4
id="SpringTesting-PlainSpringTestusingJUnit4.xwithJavaConfigExample">Plain
Spring Test using JUnit 4.x with Java Config Example</h4><p>You can completely
avoid using an XML configuration file by using <a shape="rect"
href="spring-java-config.html">Spring Java Config</a>.  Here is a unit
test using JUnit 4.x support from Spring Test using <a shape="rect"
class="external-link"
href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/patterns/FilterTest.java">Java
Config</a>.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
@ContextConfiguration(
locations =
"org.apache.camel.spring.javaconfig.patterns.FilterTest$ContextConfig",
@@ -241,16 +197,14 @@ public class FilterTest extends Abstract
}
}
]]></script>
-</div></div>
-
-<p>This is similar to the XML Config example above except that there is no XML
file and instead the nested <strong>ContextConfig</strong> class does all of
the configuration; so your entire test case is contained in a single Java
class. We currently have to reference by class name this class in the
<strong>@ContextConfiguration</strong> which is a bit ugly. Please vote for <a
shape="rect" class="external-link"
href="http://jira.springframework.org/browse/SJC-238"
rel="nofollow">SJC-238</a> to address this and make Spring Test work more
cleanly with Spring JavaConfig.</p>
-
-<h4 id="SpringTesting-PlainSpringTestusingJUnit4.xRunnerwithXMLConfig">Plain
Spring Test using JUnit 4.x Runner with XML Config</h4>
-
-<p>You can avoid extending Spring classes by using the SpringJUnit4ClassRunner
provided by Spring Test.  This custom JUnit runner means you are free to
choose your own class hierarchy while retaining all the capabilities of Spring
Test.</p>
+</div></div><p>This is similar to the XML Config example above except that
there is no XML file and instead the nested <strong>ContextConfig</strong>
class does all of the configuration; so your entire test case is contained in a
single Java class. We currently have to reference by class name this class in
the <strong>@ContextConfiguration</strong> which is a bit ugly. Please vote for
<a shape="rect" class="external-link"
href="http://jira.springframework.org/browse/SJC-238"
rel="nofollow">SJC-238</a> to address this and make Spring Test work more
cleanly with Spring JavaConfig.</p><h4
id="SpringTesting-PlainSpringTestusingJUnit4.0.xRunnerwithXMLConfig">Plain
Spring Test using JUnit 4.0.x Runner with XML Config</h4><p>You can avoid
extending Spring classes by using the SpringJUnit4ClassRunner provided by
Spring Test.  This custom JUnit runner means you are free to choose your
own class hierarchy while retaining all the capabilities of Spring Test.</p>
<div class="aui-message
hint shadowed information-macro">
+ <span class="aui-icon icon-hint">Icon</span>
+ <div class="message-content">
+ <p>This is for Spring 4.0.x. If you use Spring 4.1
or newer, then see the next section.</p>
+ </div>
+ </div>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
-@RunWith(SpringJUnit4ClassRunner.class)
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MyCamelTest {
@@ -272,21 +226,39 @@ public class MyCamelTest {
  }
}
]]></script>
-</div></div>
-
-<h3 id="SpringTesting-CamelEnhancedSpringTest">Camel Enhanced Spring Test</h3>
+</div></div><h4
id="SpringTesting-PlainSpringTestusingJUnit4.1.xRunnerwithXMLConfig">Plain
Spring Test using JUnit 4.1.x Runner with XML Config</h4><p>You can avoid
extending Spring classes by using the SpringJUnit4ClassRunner provided by
Spring Test.  This custom JUnit runner means you are free to choose your
own class hierarchy while retaining all the capabilities of Spring Test.</p>
<div class="aui-message hint shadowed information-macro">
+ <span class="aui-icon icon-hint">Icon</span>
+ <div class="message-content">
+ <p>When using Spring 4.1 onwards, you need to use
the @BootstrapWith annotation to configure it to use Camel testing, as shown
below.</p>
+ </div>
+ </div>
+<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[@RunWith(SpringJUnit4ClassRunner.class)
+@BootstrapWith(CamelTestContextBootstrapper.class)
+@ContextConfiguration
+public class MyCamelTest {
-<p>Using org.apache.camel.test.junit4.CamelSpringJUnit4ClassRunner runner
with the <strong>@RunWith</strong> annotation or extending
org.apache.camel.testng.AbstractCamelTestNGSpringContextTests provides the full
feature set of Spring Test with support for the feature set provided in the
CamelTestSupport classes.  A number of Camel specific annotations have
been developed in order to provide for declarative manipulation of the Camel
context(s) involved in the test.  These annotations free your test classes
from having to inherit from the CamelSpringTestSupport classes and also reduce
the amount of code required to customize the tests.</p>
+Â Â @Autowired
+Â Â protected CamelContext camelContext;
-<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p> Annotation Class </p></th><th
colspan="1" rowspan="1" class="confluenceTh"><p> Applies To </p></th><th
colspan="1" rowspan="1" class="confluenceTh"><p> Description </p></th><th
colspan="1" rowspan="1" class="confluenceTh"><p> Default Behavioir If Not
Present </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> Default
Behavior If Present </p></th></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> org.apache.camel.test.spring.DisableJmx <br
clear="none" class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Class </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Indicates if JMX should be globally disabled in the
CamelContexts that are bootstrapped  during the test through the use of
Spring Test loaded application contexts. <br clear="none"
class="atl-forced-newline"> </p></td><td colspan="1" row
span="1" class="confluenceTd"><p> JMX is disabled </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> JMX is disabled <br clear="none"
class="atl-forced-newline"> </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> org.apache.camel.test.spring.ExcludeRoutes <br
clear="none" class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Class <br clear="none" class="atl-forced-newline">
</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Indicates if
certain route builder classes should be excluded from discovery.
 Initializes a org.apache.camel.spi.PackageScanClassResolver to
exclude a set of given classes from being resolved. Typically this is used at
test time to exclude certain routes, which might otherwise be just noisy,
from being discovered and initialized. <br clear="none"
class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Not enabled and no routes are exclu
ded </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> No routes
are excluded </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> org.apache.camel.test.spring.LazyLoadTypeConverters
(Deprecated) <br clear="none" class="atl-forced-newline"> </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> Class <br clear="none"
class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Indicates if the CamelContexts that are
bootstrapped during the test through the use of Spring Test loaded
application contexts should use lazy loading of type converters. </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> Type converters are not lazy
loaded </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Type
converters are not lazy loaded </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> org.apache.camel.test.spring.MockEndpoints <br
clear="none" class="atl-forced-newline"> </p></td><td co
lspan="1" rowspan="1" class="confluenceTd"><p> Class <br clear="none"
class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Triggers the auto-mocking of endpoints whose URIs
match the provided filter.  The default filter is "*" which matches
all endpoints.
 See org.apache.camel.impl.InterceptSendToMockEndpointStrategy for more
details on the registration of the mock endpoints. </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> Not enabled </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> All endpoints are sniffed and recorded in
a mock endpoint. </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> org.apache.camel.test.spring.MockEndpointsAndSkip<br
clear="none" class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Class </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Triggers the auto-mocking of endpoints whose URIs
match the p
rovided filter.  The default filter is "*", which matches all
endpoints.  See <a shape="rect" class="external-link"
href="http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToMockEndpointStrategy.java?view=markup">org.apache.camel.impl.InterceptSendToMockEndpointStrategy</a> for more
details on the registration of the mock endpoints.  This annotation will
also skip sending the message to matched endpoints as well.<br clear="none"
class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Not enabled<br clear="none"
class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> All endpoints are sniffed and recorded in a mock
endpoint.  The original endpoint is not invoked.<br clear="none"
class="atl-forced-newline"> </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> org.apache.camel.test.spring.ProvidesBreakpoint <br
clear="none" class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Method </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Indicates that the annotated method returns
an org.apache.camel.spi.Breakpoint for use in the test.  Useful
for intercepting traffic to all endpoints or simply for setting a break
point in an IDE for debugging.  The method must be public, static,
take no arguments, and return org.apache.camel.spi.Breakpoint. <br clear="none"
class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> N/A </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> The returned Breakpoint is registered in the
CamelContext(s) </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> org.apache.camel.test.spring.ShutdownTimeout <br
clear="none" class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Class <br clear="none" class
="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Indicates to set the shutdown timeout of all
CamelContexts instantiated through the use of Spring Test loaded
application contexts.  If no annotation is used, the timeout
is automatically reduced to 10 seconds by the test framework. <br
clear="none" class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> 10 seconds </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> 10 seconds </p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p> org.apache.camel.test.spring.UseAdviceWith
<br clear="none" class="atl-forced-newline"> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> Class <br clear="none"
class="atl-forced-newline"> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Indicates the use of adviceWith() within the test
class.  If a class is annotated with this annotation and
UseAdviceWith#value()&
#160;returns true, any CamelContexts bootstrapped during the test through
the use of Spring Test loaded application contexts will not be started
automatically.  The test author is responsible for injecting the
Camel contexts into the test and executing CamelContext#start() on
them at the appropriate time after any advice has been applied to the
routes in the CamelContext(s). <br clear="none" class="atl-forced-newline">
</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> CamelContexts do
not automatically start. </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> CamelContexts do not automatically start.
</p></td></tr></tbody></table></div>
+Â Â @EndpointInject(uri = "mock:foo")
+Â Â protected MockEndpoint foo;
+ @Test
+ @DirtiesContext
+Â Â public void testMocksAreValid() throws Exception {
+ ...   Â
-<p>The following example illustrates the use of the
<strong>@MockEndpoints</strong> annotation in order to setup mock
endpoints as interceptors on all endpoints using the Camel Log component and
the <strong>@DisableJmx</strong> annotation to enable JMX which is disabled
during tests by default.  Note that we still use the
<strong>@DirtiesContext</strong> annotation to ensure that the CamelContext,
routes, and mock endpoints are reinitialized between test methods.</p>
+Â Â Â Â foo.message(0).header("bar").isEqualTo("ABC");
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
-@RunWith(CamelSpringJUnit4ClassRunner.class)
+Â Â Â Â MockEndpoint.assertIsSatisfied(camelContext);
+Â Â }
+}
+]]></script>
+</div></div><h3 id="SpringTesting-CamelEnhancedSpringTest"><span
style="line-height: 1.5625;">Camel Enhanced Spring Test</span></h3><p>Using
org.apache.camel.test.junit4.CamelSpringJUnit4ClassRunner runner with
the <strong>@RunWith</strong> annotation or extending
org.apache.camel.testng.AbstractCamelTestNGSpringContextTests provides the full
feature set of Spring Test with support for the feature set provided in the
CamelTestSupport classes.  A number of Camel specific annotations have
been developed in order to provide for declarative manipulation of the Camel
context(s) involved in the test.  These annotations free your test classes
from having to inherit from the CamelSpringTestSupport classes and also reduce
the amount of code required to customize the tests.</p><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Annotation Class</p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p
>Applies To</p></th><th colspan="1" rowspan="1"
>class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1"
>class="confluenceTh"><p>Default Behavioir If Not Present</p></th><th
>colspan="1" rowspan="1" class="confluenceTh"><p>Default Behavior If
>Present</p></th></tr><tr><td colspan="1" rowspan="1"
>class="confluenceTd"><p>org.apache.camel.test.spring.DisableJmx</p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p>Class</p></td><td colspan="1"
>rowspan="1" class="confluenceTd"><p>Indicates if JMX should be globally
>disabled in the CamelContexts that are bootstrapped  during the test
>through the use of Spring Test loaded application contexts.</p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p>JMX is disabled</p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p>JMX is
>disabled</p></td></tr><tr><td colspan="1" rowspan="1"
>class="confluenceTd"><p>org.apache.camel.test.spring.ExcludeRoutes</p></td><td
> colspan="1" rowspan="1" class="confluenceTd"><p>Cla
ss</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Indicates if
certain route builder classes should be excluded from discovery.
 Initializes a org.apache.camel.spi.PackageScanClassResolver to
exclude a set of given classes from being resolved. Typically this is used at
test time to exclude certain routes, which might otherwise be just noisy,
from being discovered and initialized.</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Not enabled and no routes are excluded</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>No routes are
excluded</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.camel.test.spring.LazyLoadTypeConverters
(Deprecated)</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Class</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Indicates if the CamelContexts that are
bootstrapped during the test through the use of Spring Test loaded
application contexts should
use lazy loading of type converters.</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Type converters are not lazy loaded</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Type converters are not lazy
loaded</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.camel.test.spring.MockEndpoints</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Class</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Triggers the auto-mocking of endpoints
whose URIs match the provided filter.  The default filter is "*"
which matches all endpoints.
 See org.apache.camel.impl.InterceptSendToMockEndpointStrategy for more
details on the registration of the mock endpoints.</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Not enabled</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>All endpoints are sniffed and recorded in a
mock endpoint.</p></td></tr><tr><td colspan="1" rowspan="1" class="
confluenceTd"><p>org.apache.camel.test.spring.MockEndpointsAndSkip</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Class</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Triggers the auto-mocking of endpoints
whose URIs match the provided filter.  The default filter is "*",
which matches all endpoints.  See <a shape="rect"
class="external-link"
href="http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToMockEndpointStrategy.java?view=markup">org.apache.camel.impl.InterceptSendToMockEndpointStrategy</a> for more
details on the registration of the mock endpoints.  This annotation will
also skip sending the message to matched endpoints as well.</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Not enabled</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>All endpoints are sniffed and
recorded in a mock endpoint.  The original endpoint is not invoked.</p></
td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.camel.test.spring.ProvidesBreakpoint</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Method</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Indicates that the annotated method returns
an org.apache.camel.spi.Breakpoint for use in the test.  Useful
for intercepting traffic to all endpoints or simply for setting a break
point in an IDE for debugging.  The method must be public, static,
take no arguments, and return org.apache.camel.spi.Breakpoint.</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>N/A</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>The returned Breakpoint is registered in
the CamelContext(s)</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.camel.test.spring.ShutdownTimeout</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Class</p></td><td colspan="1"
rowspan="1" class="confluence
Td"><p>Indicates to set the shutdown timeout of all CamelContexts instantiated
through the use of Spring Test loaded application contexts.  If no
annotation is used, the timeout is automatically reduced to 10 seconds by
the test framework.</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>10 seconds</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>10 seconds</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.camel.test.spring.UseAdviceWith</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Class</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Indicates the use of adviceWith() within
the test class.  If a class is annotated with this annotation and
UseAdviceWith#value() returns true, any CamelContexts bootstrapped
during the test through the use of Spring Test loaded application contexts
will not be started automatically.  The test author is responsible
for injecti
ng the Camel contexts into the test and executing CamelContext#start() on
them at the appropriate time after any advice has been applied to the
routes in the CamelContext(s).</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>CamelContexts do not automatically start.</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>CamelContexts do not
automatically start.</p></td></tr></tbody></table></div><p>The following
example illustrates the use of the
<strong>@MockEndpoints</strong> annotation in order to setup mock
endpoints as interceptors on all endpoints using the Camel Log component and
the <strong>@DisableJmx</strong> annotation to enable JMX which is disabled
during tests by default.  Note that we still use the
<strong>@DirtiesContext</strong> annotation to ensure that the CamelContext,
routes, and mock endpoints are reinitialized between test methods.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent
pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[@RunWith(CamelSpringJUnit4ClassRunner.class)
+@BootstrapWith(CamelTestContextBootstrapper.class)
@ContextConfiguration
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@MockEndpoints("log:*")
@@ -318,16 +290,8 @@ public class CamelSpringJUnit4ClassRunne
MockEndpoint.assertIsSatisfied(camelContext);
}
]]></script>
-</div></div>
-
-
-<h3 id="SpringTesting-AddingmoreMockexpectations">Adding more Mock
expectations</h3>
-
-<p>If you wish to programmatically add any new assertions to your test you can
easily do so with the following. Notice how we use @EndpointInject to inject a
Camel endpoint into our code then the <a shape="rect" href="mock.html">Mock</a>
API to add an expectation on a specific message.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
-@ContextConfiguration
+</div></div><h3 id="SpringTesting-AddingmoreMockexpectations">Adding more Mock
expectations</h3><p>If you wish to programmatically add any new assertions to
your test you can easily do so with the following. Notice how we use
@EndpointInject to inject a Camel endpoint into our code then the <a
shape="rect" href="mock.html">Mock</a> API to add an expectation on a specific
message.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[@ContextConfiguration
public class MyCamelTest extends AbstractJUnit38SpringContextTests {
@Autowired
@@ -344,17 +308,8 @@ public class MyCamelTest extends Abstrac
}
}
]]></script>
-</div></div>
-
-<h3 id="SpringTesting-Furtherprocessingthereceivedmessages">Further processing
the received messages</h3>
-
-<p>Sometimes once a <a shape="rect" href="mock.html">Mock</a> endpoint has
received some messages you want to then process them further to add further
assertions that your test case worked as you expect.</p>
-
-<p>So you can then process the received message exchanges if you like...</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
-@ContextConfiguration
+</div></div><h3
id="SpringTesting-Furtherprocessingthereceivedmessages">Further processing the
received messages</h3><p>Sometimes once a <a shape="rect"
href="mock.html">Mock</a> endpoint has received some messages you want to then
process them further to add further assertions that your test case worked as
you expect.</p><p>So you can then process the received message exchanges if you
like...</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[@ContextConfiguration
public class MyCamelTest extends AbstractJUnit38SpringContextTests {
@Autowired
@@ -377,17 +332,8 @@ public class MyCamelTest extends Abstrac
}
}
]]></script>
-</div></div>
-
-<h3 id="SpringTesting-Sendingandreceivingmessages">Sending and receiving
messages</h3>
-
-<p>It might be that the <a shape="rect"
href="enterprise-integration-patterns.html">Enterprise Integration Patterns</a>
you have defined in either <a shape="rect" href="spring.html">Spring</a> XML or
using the Java <a shape="rect" href="dsl.html">DSL</a> do all of the sending
and receiving and you might just work with the <a shape="rect"
href="mock.html">Mock</a> endpoints as described above. However sometimes in a
test case its useful to explicitly send or receive messages directly.</p>
-
-<p>To send or receive messages you should use the <a shape="rect"
href="bean-integration.html">Bean Integration</a> mechanism. For example to
send messages inject a ProducerTemplate using the @EndpointInject annotation
then call the various send methods on this object to send a message to an
endpoint. To consume messages use the @MessageDriven annotation on a method to
have the method invoked when a message is received.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
-public class Foo {
+</div></div><h3 id="SpringTesting-Sendingandreceivingmessages">Sending and
receiving messages</h3><p>It might be that the <a shape="rect"
href="enterprise-integration-patterns.html">Enterprise Integration Patterns</a>
you have defined in either <a shape="rect" href="spring.html">Spring</a> XML or
using the Java <a shape="rect" href="dsl.html">DSL</a> do all of the sending
and receiving and you might just work with the <a shape="rect"
href="mock.html">Mock</a> endpoints as described above. However sometimes in a
test case its useful to explicitly send or receive messages directly.</p><p>To
send or receive messages you should use the <a shape="rect"
href="bean-integration.html">Bean Integration</a> mechanism. For example to
send messages inject a ProducerTemplate using the @EndpointInject annotation
then call the various send methods on this object to send a message to an
endpoint. To consume messages use the @MessageDriven annotation on a method to
have the method invoked when a mess
age is received.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[public class Foo {
@EndpointInject(uri="activemq:foo.bar")
ProducerTemplate producer;
@@ -403,11 +349,7 @@ public class Foo {
}
}
]]></script>
-</div></div>
-
-<h3 id="SpringTesting-SeeAlso">See Also</h3>
-
-<ul><li>A <a shape="rect" class="external-link"
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.java">real
example test case using Mock and Spring</a> along with its <a shape="rect"
class="external-link"
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.xml">Spring
XML</a></li><li><a shape="rect" href="bean-integration.html">Bean
Integration</a></li><li><a shape="rect" href="mock.html">Mock</a>
endpoint</li><li><a shape="rect" href="test.html">Test</a>
endpoint</li></ul></div>
+</div></div><h3 id="SpringTesting-SeeAlso">See Also</h3><ul><li>A <a
shape="rect" class="external-link"
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.java">real
example test case using Mock and Spring</a> along with its <a shape="rect"
class="external-link"
href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.xml">Spring
XML</a></li><li><a shape="rect" href="bean-integration.html">Bean
Integration</a></li><li><a shape="rect" href="mock.html">Mock</a>
endpoint</li><li><a shape="rect" href="test.html">Test</a>
endpoint</li></ul></div>
</td>
<td valign="top">
<div class="navigation">