blob: 22597e186ed150daec0c5ac7bfcf629cc605b51c [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">
<title>Apache TomEE</title>
<meta name="description"
content="Apache TomEE is a lightweight, yet powerful, JavaEE Application server with feature rich tooling." />
<meta name="keywords" content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian" />
<meta name="author" content="Luka Cvetinovic for Codrops" />
<link rel="icon" href="../../../../../favicon.ico">
<link rel="icon" type="image/png" href="../../../../../favicon.png">
<meta name="msapplication-TileColor" content="#80287a">
<meta name="theme-color" content="#80287a">
<link rel="stylesheet" type="text/css" href="../../../../../css/normalize.css">
<link rel="stylesheet" type="text/css" href="../../../../../css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="../../../../../css/owl.css">
<link rel="stylesheet" type="text/css" href="../../../../../css/animate.css">
<link rel="stylesheet" type="text/css" href="../../../../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="../../../../../fonts/eleganticons/et-icons.css">
<link rel="stylesheet" type="text/css" href="../../../../../css/jqtree.css">
<link rel="stylesheet" type="text/css" href="../../../../../css/idea.css">
<link rel="stylesheet" type="text/css" href="../../../../../css/cardio.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2717626-1']);
_gaq.push(['_setDomainName', 'apache.org']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div class="preloader">
<img src="../../../../../img/loader.gif" alt="Preloader image">
</div>
<nav class="navbar">
<div class="container">
<div class="row"> <div class="col-md-12">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">
<span>
<img src="../../../../../img/logo-active.png">
</span>
Apache TomEE
</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right main-nav">
<li><a href="../../../../../docs.html">Documentation</a></li>
<li><a href="../../../../../community/index.html">Community</a></li>
<li><a href="../../../../../security/security.html">Security</a></li>
<li><a href="../../../../../download-ng.html">Downloads</a></li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div></div>
</div>
<!-- /.container-fluid -->
</nav>
<div id="main-block" class="container main-block">
<div class="row title">
<div class="col-md-12">
<div class='page-header'>
<div class='btn-toolbar pull-right' style="z-index: 2000;">
<div class='btn-group'>
<a class="btn" href="../../../../../tomee-7.0/docs/developer/testing/other/index.pdf"><i class="fa fa-file-pdf-o"></i> Download as PDF</a>
</div>
</div>
<h1>Other Testing Techniques</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="sect1">
<h2 id="_ejbcontainer">EJBContainer</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The <code>EJBContainer</code> API is a JavaEE API enriched by some OpenEJB features to make the testing easier.</p>
</div>
<div class="paragraph">
<p>It starts a container (embedded for case we are interested in) scanning the classpath. This operation can be
slow and if you go with this solution maybe think to start it only once for all tests.</p>
</div>
<div class="sect2">
<h3 id="_sample">Sample</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import javax.ejb.embeddable.EJBContainer;
import javax.inject.Inject;
import javax.naming.NamingException;
import static org.junit.Assert.assertTrue;
public class ATest {
@Inject
private MyCDIBean aBean;
@PersistenceContext
private EntityManager em;
@Resource
private DataSource ds;
@BeforeClass
public static void start() throws NamingException {
container = EJBContainer.createEJBContainer();
}
@AfterClass
public static void shutdown() {
if (container != null) {
container.close();
}
}
@Before
public void inject() throws NamingException {
container.getContext().bind("inject", this);
}
@After
public void reset() throws NamingException {
container.getContext().unbind("inject");
}
@Test
public void aTest() {
// ...
}
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>It will use <code>createEJBContainer()</code> method to start the container and application, and <code>close()</code> to shutdown it.</p>
</div>
<div class="paragraph">
<p>OpenEJB provides the <code>bind("inject")</code> hack to be able to get injection in the test class.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_openejb_junit">OpenEJB JUnit</h2>
<div class="sectionbody">
<div class="paragraph">
<p><code>openejb-junit</code> is another artifact providing some facilities for testing.</p>
</div>
<div class="sect2">
<h3 id="_ejbcontainer_rule">EJBContainer Rule</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Properties({
@Property(key = DeploymentFilterable.CLASSPATH_EXCLUDE, value = "jar:.*"),
@Property(key = DeploymentFilterable.CLASSPATH_INCLUDE, value = ".*openejb-junit.*")
})
public class TestEJBContainerDefaultConfig {
@Rule
public final EJBContainerRule containerRule = new EJBContainerRule(this);
@org.apache.openejb.junit.jee.resources.TestResource
private Context ctx;
@org.apache.openejb.junit.jee.resources.TestResource
private java.util.Properties props;
@org.apache.openejb.junit.jee.resources.TestResource
private EJBContainer container;
@Test
public void configIsHere() {
// ...
}
}</code></pre>
</div>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
there is the equivalent runner: <code>@RunWith(EJBContainerRunner.class)</code>
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="_injectrule_injections_for_ejbcontainerrule">InjectRule: injections for EJBContainerRule</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">@Properties({
@Property(key = DeploymentFilterable.CLASSPATH_EXCLUDE, value = "jar:.*"),
@Property(key = DeploymentFilterable.CLASSPATH_INCLUDE, value = ".*myjar.*")
})
public class TestEJBContainerRule {
@ClassRule
public static final EJBContainerRule CONTAINER_RULE = new EJBContainerRule();
@Rule
public final InjectRule injectRule = new InjectRule(this, CONTAINER_RULE);
@EJB
private BasicEjbLocal ejb;
@Test
public void aTest() {
// ...
}
}</code></pre>
</div>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
an alternative in <code>openejb-core</code> is to use <code>org.apache.openejb.Injector.inject(instance)</code>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-sm-6 text-center-mobile">
<h3 class="white">Be simple. Be certified. Be Tomcat.</h3>
<h5 class="light regular light-white">"A good application in a good server"</h5>
<ul class="social-footer">
<li><a href="https://www.facebook.com/ApacheTomEE/"><i class="fa fa-facebook"></i></a></li>
<li><a href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
<li><a href="https://plus.google.com/communities/105208241852045684449"><i class="fa fa-google-plus"></i></a></li>
</ul>
</div>
<div class="col-sm-6 text-center-mobile">
<div class="row opening-hours">
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../../../../latest/docs/documentation.html" class="white">Documentation</a></h5>
<ul class="list-unstyled">
<li><a href="../../../../../latest/docs/admin/configuration/index.html" class="regular light-white">How to configure</a></li>
<li><a href="../../../../../latest/docs/admin/file-layout.html" class="regular light-white">Dir. Structure</a></li>
<li><a href="../../../../../latest/docs/developer/testing/index.html" class="regular light-white">Testing</a></li>
<li><a href="../../../../../latest/docs/admin/cluster/index.html" class="regular light-white">Clustering</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../../../../latest/examples/" class="white">Examples</a></h5>
<ul class="list-unstyled">
<li><a href="../../../../../latest/examples/simple-cdi-interceptor.html" class="regular light-white">CDI Interceptor</a></li>
<li><a href="../../../../../latest/examples/rest-cdi.html" class="regular light-white">REST with CDI</a></li>
<li><a href="../../../../../latest/examples/ejb-examples.html" class="regular light-white">EJB</a></li>
<li><a href="../../../../../latest/examples/jsf-managedBean-and-ejb.html" class="regular light-white">JSF</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../../../../community/index.html" class="white">Community</a></h5>
<ul class="list-unstyled">
<li><a href="../../../../../community/contributors.html" class="regular light-white">Contributors</a></li>
<li><a href="../../../../../community/social.html" class="regular light-white">Social</a></li>
<li><a href="../../../../../community/sources.html" class="regular light-white">Sources</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../../../../security/index.html" class="white">Security</a></h5>
<ul class="list-unstyled">
<li><a href="http://apache.org/security" target="_blank" class="regular light-white">Apache Security</a></li>
<li><a href="http://apache.org/security/projects.html" target="_blank" class="regular light-white">Security Projects</a></li>
<li><a href="http://cve.mitre.org" target="_blank" class="regular light-white">CVE</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="row bottom-footer text-center-mobile">
<div class="col-sm-12 light-white">
<p>Copyright &copy; 1999-2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
</div>
</div>
</div>
</footer>
<!-- Holder for mobile navigation -->
<div class="mobile-nav">
<ul>
<li><a hef="../../../../../latest/docs/admin/index.html">Administrators</a>
<li><a hef="../../../../../latest/docs/developer/index.html">Developers</a>
<li><a hef="../../../../../latest/docs/advanced/index.html">Advanced</a>
<li><a hef="../../../../../community/index.html">Community</a>
</ul>
<a href="#" class="close-link"><i class="arrow_up"></i></a>
</div>
<!-- Scripts -->
<script src="../../../../../js/jquery-1.11.1.min.js"></script>
<script src="../../../../../js/owl.carousel.min.js"></script>
<script src="../../../../../js/bootstrap.min.js"></script>
<script src="../../../../../js/wow.min.js"></script>
<script src="../../../../../js/typewriter.js"></script>
<script src="../../../../../js/jquery.onepagenav.js"></script>
<script src="../../../../../js/tree.jquery.js"></script>
<script src="../../../../../js/highlight.pack.js"></script>
<script src="../../../../../js/main.js"></script>
</body>
</html>