如何对ProcessorBean进行单元测试? 由于我只是不想测试ProcessorBean而不是Dao,我需要存根或模拟Dao,但我不知道如何使用Junit来做到这一点。
我正在使用Junit4和Ejb3.0
@Stateless
public class ProcessorBean {
@EJB
private Dao dao;
public void process() {
//logic to be tested
}
}
答案 0 :(得分:3)
OpenEJB中有一些支持,你可能会觉得它与模拟结合起来很有用。
作为EJB 3.0 Embedded 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
}
}
在这里,我们看到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>
答案 1 :(得分:1)
如果要模拟任何对象或创建其存根,可以使用其他库,例如Mockito。它允许您非常轻松地模拟任何类甚至接口。
补充阅读: