Series of Effective Mockito articles有在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>
非常有趣的功能。不知道*關於Open EJB的信息 - 感謝分享! – 2012-01-03 23:06:54
@David Blevins在這種情況下,MockDao.class是一個開發者實現的DAO的假嗎? – Bala 2012-01-11 12:13:58
@Bala確實如此。因此,從理論上講,MockDao可以拋出一個異常來僞造一個持久性失敗或其他東西,或者硬連接返回一個特定的實體等。靜態內部類可以正常工作,所以MockDao可以在測試用例中正確定義。大多數在OpenEJB中的單元測試都傾向於有一堆靜態的內部類「測試」bean。測試豆(aka mock beans)往往很小,很高興將它們放在一起。 – 2012-01-11 17:05:52