2012-01-03 3 views
5

ユニットのテストはどのようにして行うことができますか? 私はDaoではなくProcessorBeanをテストすることしか望んでいないので、私はDaoをスタブまたはモックする必要がありますが、Junitを使ってどのようにできるかわかりません。あなたが任意のオブジェクトを模擬またはそのスタブを作成したい場合は、私は、あなたが、例えば、追加のライブラリを使用することができますJunit4とEJB3.0別のejbが注入されたejb3.0のユニットテスト

@Stateless 
public class ProcessorBean { 

    @EJB 
    private Dao dao; 

    public void process() { 
     //logic to be tested 
    } 
} 

答えて

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で実行されるテストケースがあります。これは、アプリケーションを定義するために使用できる@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> 
+0

非常に興味深い機能:

Mavenの依存関係はそれほどのように見えるかもしれません。 Open EJBについて*分かりませんでした - 共有してくれてありがとう! –

+0

@David Blevinsこの場合、MockDao.classはDAOの権利を偽装した開発者ですか? – Bala

+0

@Bala正確に。だから理論的にはMockDaoは永続性の失敗や何かを偽ったり、特定のEntityを返すようにハードワイヤードされたりする例外をスローする可能性があります。静的な内部クラスはうまく動作しますので、MockDaoはテストケースで正しく定義できます。 OpenEJBの単体テストの大部分は、静的な内部クラスの「テスト」ビーンを持つ傾向があります。テストビーンズ(別名擬似豆)は小さくなる傾向があり、それらを一緒に保つのはいいことです。 –

関連する問題