にあなたはモックとの組み合わせで役立つかもしれないの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
で実行されるテストケースがあります。これは、アプリケーションを定義するために使用できる@Module
メソッドを探すJUnitテストランナーのための単純なラッパーです。
これは、実際にOpenEJBが何年もの間、すべての内部テストを行っており、最後のいくつかのリリース(3.1.3以降)でオープンすることを決めたものです。クラスパスのスキャンや、より重いデプロイメントの一部をカットするので、強力で非常に高速です。
<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>
非常に興味深い機能:
Mavenの依存関係はそれほどのように見えるかもしれません。 Open EJBについて*分かりませんでした - 共有してくれてありがとう! –
@David Blevinsこの場合、MockDao.classはDAOの権利を偽装した開発者ですか? – Bala
@Bala正確に。だから理論的にはMockDaoは永続性の失敗や何かを偽ったり、特定のEntityを返すようにハードワイヤードされたりする例外をスローする可能性があります。静的な内部クラスはうまく動作しますので、MockDaoはテストケースで正しく定義できます。 OpenEJBの単体テストの大部分は、静的な内部クラスの「テスト」ビーンを持つ傾向があります。テストビーンズ(別名擬似豆)は小さくなる傾向があり、それらを一緒に保つのはいいことです。 –