用JUNIT对 ejb3 进行单元测试,有两种方式:
1、通过调用远程接口,去调用在应用服务器的EJB容器中运行的EJB。
2、EJB3.1以后,EJB LITE模式可以没有远程接口,这时只能通过第三方工具创建EJB embeddable container,下面是用openejb去创建EJB容器进行junit测试。
环境配置:
环境:jboss7.1 + EJB3.1 + jUNIT4.8.1+h2数据库(jboss7.1自带的,可以下载一个服务端,很小很简单很方便)
项目: maven3 + eclipse3.7.
1、pom.xml配置:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<scope>provided</scope>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<scope>provided</scope>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0-3</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core-hibernate</artifactId>
<version>4.0.0-beta-2</version>
<type>pom</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jboss</groupId>
<artifactId>jboss-common</artifactId>
<version>4.2.2.GA</version>
</dependency>
2、ejb-test-configure.properties配置:
DataSource=new://Resource?type=DataSource
DataSource.JdbcDriver=org.h2.Driver
DataSource.JdbcUrl=jdbc:h2:tcp://localhost/~/test
DataSource.UserName=sa
DataSource.Password=sa
3. 创建EJB3容器:
try {
Properties props = new Properties();
props.load(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("ejb-test-configure.properties"));
container = EJBContainer.createEJBContainer(props);
this.ctx = container.getContext();
} catch (Exception e) {
e.printStackTrace();
}
4、查找EJB:
protected <T> T getEJBBean(final Class<T> clz) {
final String jndiName = "java:global/{项目名称}/"+clz.getSimpleName()+"Impl!"+clz.getName();
return (T) this.ctx.lookup(jndiName);
}