Sve*_*ven 5 unit-testing dependency-injection junit4 java-ee
我如何对ProcessorBean进行单元测试?由于我只是不想测试ProcessorBean而不是Dao,我需要存根或模拟Dao,但我不知道如何使用Junit来做到这一点.
我正在使用Junit4和Ejb3.0
@Stateless
public class ProcessorBean {
@EJB
private Dao dao;
public void process() {
//logic to be tested
}
}
Run Code Online (Sandbox Code Playgroud)
您可能会发现 OpenEJB 中的一些支持与模拟结合起来很有用。
作为 EJB 3.0 嵌入式 EJBContainer API 的替代方案,您可以简单地用代码构建您的应用程序。
import junit.framework.TestCase;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.StatelessBean;
import org.apache.openejb.junit.ApplicationComposer;
import org.apache.openejb.junit.Module;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.ejb.EJB;
@RunWith(ApplicationComposer.class)
public class ProcessorBeanTest extends TestCase {
@EJB
private ProcessorBean processorBean;
@Module
public EjbJar beans() {
EjbJar ejbJar = new EjbJar();
ejbJar.addEnterpriseBean(new StatelessBean(ProcessorBean.class));
ejbJar.addEnterpriseBean(new StatelessBean(MockDao.class));
return ejbJar;
}
@Test
public void test() throws Exception {
// use your processorBean
}
}
Run Code Online (Sandbox Code Playgroud)
在这里我们看到一个由ApplicationComposer
. 它是 JUnit 测试运行程序的简单包装器,用于查找@Module
可用于定义应用程序的方法。
这实际上是 OpenEJB 多年来完成所有内部测试的方式,也是我们决定在最近几个版本(自 3.1.3 起)中开放的方式。它功能强大且速度极快,因为它消除了类路径扫描和部署中的一些较繁重的部分。
Maven 依赖项可能如下所示:
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0-3-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<!--
The <scope>test</scope> guarantees that none of your runtime
code is dependent on any OpenEJB classes.
-->
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
<version>4.0.0-beta-1</version>
<scope>test</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3408 次 |
最近记录: |