nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

Arquillianを使った本物のJava EEテスト その2

JBoss Advent Calendar 2011の18日目のエントリです。

昨日例に挙げたテストコードを一通り見ていきましょう。今回はJUnitを使っていますが、TestNGも使えます。

@RunWith(Arquillian.class)
public class MailBeanTest {
    @Inject
    MailBean mailBean;

    @Deployment
    public static Archive<?> createTestArchive() {
        return ShrinkWrap.create(JavaArchive.class, "test.jar")
            .addClasses(MailBean.class)
            .addAsResource(EmptyAsset.INSTANCE, "META-INF/beans.xml");
    }

    @Test
    public void callSendTestMessage() throws Exception {
        mailBean.sendTestMessage();
        assertTrue(true); // ok, no exception
    }
}

Arquillian有効化

JUnitRunWithアノテーションJUnitのRunnerを継承しているArquillian.classを指定します。これでArquillianが有効になります。

@RunWith(Arquillian.class)
public class MailBeanTest {

テスト対象クラスのInject

テストコードでも普通のコードと同じようにMailBeanを@Injectで取得できます。

    @Inject
    MailBean mailBean;

テスト対象のデプロイ

@Deploymentアノテーションが付与されているメソッドでは、ShrinkWrapを利用してアーカイブを作成して返却します。ShrinkWrapはArquillian内部で利用されているパッケージングライブラリです。ここで作成されたアーカイブがテスト時にデプロイされます。

    @Deployment
    public static Archive<?> createTestArchive() {
        return ShrinkWrap.create(JavaArchive.class, "test.jar")
            .addClasses(MailBean.class)
            .addAsResource(EmptyAsset.INSTANCE, "META-INF/beans.xml");
    }

テストメソッド

実際のテストコードです。通常のJUnitのテストケース同様@Testアノテーションでマークします。今回はコールして例外が発生しなければ成功としています。

    @Test
    public void callSendTestMessage() throws Exception {
        mailBean.sendTestMessage();
        assertTrue(true); // ok, no exception
    }