Get Started Faster with Forge

Authors: Paul Bakker, Lincoln Baxter, III Translator: Takayuki Konishi Language:
Last Update:Apr 19, 2012

このガイドでは、JBoss ForgeのArquillianプラグインについて解説します。このガイドを読むと、以下のことができるようになります:

  • Forge環境にArquillainプラグインをインストールする
  • このプラグインを使って、MavenベースのJavaプロジェクトに、Arquillianインフラストラクチャを追加する
  • コンポーネントと、対応するArquillianのテストを生成する
  • 複数のコンテナで手動設定なしにArquillianテストを実行する

読者は、 Getting Started guide で説明されているたくさんの重複したステップを実行しているでしょう。それらの煩雑な作業はForgeに実行させます。このガイドは、これまでのガイドよりも、早く始められるよう、早く読めるように作成しました。

前提

このガイドは、 JBoss Forge がセットアップ済みであることが前提です。Forgeのインストールは、比較的短い手順です。ダウンロードやインストールの説明は、"Getting Started guide"や official Forge documentation を参照してください。また、 JDK 1.6 以降が必要です。

プロジェクトを作成する

Arquillianを始める前に、プロジェクトが必要です。まだ作成していなければ、以下のForgeのコマンドでJPAを含むシンプルなJava EE 6プロジェクトを作成してください。

$ new-project --named arquillian-demo --topLevelPackage demo
? Use [/Users/paul/arquillian-demo] as project directory? [Y/n]
***SUCCESS*** Created project [arquillian-demo] in new working directory [/Users/paul/arquillian-demo]
Wrote /Users/paul/arquillian-demo
Wrote /Users/paul/arquillian-demo/pom.xml
Wrote /Users/paul/arquillian-demo/src/main/java
Wrote /Users/paul/arquillian-demo/src/test/java
Wrote /Users/paul/arquillian-demo/src/main/resources
Wrote /Users/paul/arquillian-demo/src/test/resources
Wrote /Users/paul/arquillian-demo/src/main/resources/META-INF/forge.xml

新しいプロジェクトが作成されました。次に、テスト対象のコードが必要です。Forgeを使って新しいCDI beanを作成しましょう。

まず、"beans"プラグインを使って、CDIをプロジェクトにインストールします。

$ beans setup
***SUCCESS*** Installed [forge.spec.cdi] successfully.
 ? Do you want to install CDI APIs? [y/N]

Wrote /Users/paul/arquillian-demo/src/main/resources/META-INF/beans.xml

それから、新しいbeanをつくりましょう。

$ beans new-bean --type demo.MySimpleBean --scoped DEPENDENT
Picked up type <JavaResource>: demo.MySimpleBean
Wrote /Users/paul/arquillian-demo/src/main/java/demo/MySimpleBean.java

プロジェクトはセットアップされました。テストの時間です!

スタート

すでに general getting started guide で見ているかもしれませんが、Arquillianのセットアップは簡単です。pom.xmlにArquillianで使う新しいコンテナを設定するのは、たくさんのコピー/ペースト作業です。Forgeでやれば、一つのコマンドです!

まず、Arquillianプラグインをインストールします。

$ forge install-plugin arquillian

次に、Arquillianとコンテナ設定をセットアップします。最初はJBoss AS7にしてみましょう。

$ arquillian setup --container JBOSS_AS_7_MANAGED

ForgeはどのバージョンのJUnitやArquillian、JBoss AS7を使用するか、聞いてきます。それぞれ、最新のfinalバージョンを使ってください。Forgeはもしユーザーがまだダウンロードしていなければ、JBoss AS7のダウンロードまでも行います。

これだけです!Arquillianの設定は終わりました。作成したプロジェクトのpom.xmlを確認すると、dependenciesとprofileが追加されていることが見て取れます。同じくForgeはarquillian.xmlファイルをsrc/test/resourcesに作成します

テストを書く

では、テストを書きましょう。繰り返しますが、Forgeを使えば素早くスタートできます。

$ arquillian create-test --class demo.MySimpleBean.java
Picked up type <JavaResource>: demo.MySimpleBeanTest
Wrote /Users/paul/arquillian-demo/src/test/java/demo/MySimpleBeanTest.java

デプロイメントとテストメソッドを持った新しいテストクラスが追加されました。これはCDIを使って、テスト対象クラスをインジェクトするので、このテストが本当にコンテナ内で実行されるか確認しましょう。もし、IDEでインポートできなければ、前に作成したMavenのプロファイルを有効にしてください。これでIDEや、直接Mavenで、あるいはForgeからテストを実行できます。

$ build --profile arq-jbossas-7-managed

おめでとう! ArquillianとForgeを使った最初の グリーンバー が表示されました!

ではJPAコードのテストを試してみましょう。

永続化のテスト

Java Persistence API (JPA)を使ったテストを書き始める前に、JPAの設定が必要です。それから、エンティティとシンプルなデータ・アクセス・オブジェクトを作ります。これらはテスト対象のクラスです。

$ persistence setup --provider HIBERNATE --container JBOSS_AS7
***SUCCESS*** Installed [forge.spec.jpa] successfully.
***INFO*** Setting transaction-type="JTA"
***INFO*** Using example data source [java:jboss/datasources/ExampleDS]
Warning:  The encoding 'UTF-8' is not supported by the Java runtime.
 ? The JPA provider [HIBERNATE], also supplies extended APIs. Install these as well? [y/N]  [false] 
Wrote /Users/paul/arquillian-demo/pom.xml
Wrote /Users/paul/arquillian-demo/src/main/resources/META-INF/persistence.xml

では、エンティティを作成します。

$ entity --named Language --package demo.entities
Created @Entity [demo.entities.Language]
Picked up type <JavaResource>: demo.entities.Language
Wrote /Users/paul/arquillian-demo/src/main/java/demo/entities/Language.java

そして、エンティティにフィールドを追加します。

$ field string --named name
Added field to demo.entities.Language: @Column private String name;
Wrote /Users/paul/arquillian-demo/src/main/java/demo/entities/Language.java

次のファイルをあなたのプロジェクトに作成してください。

src/main/java/demo/dao/LanguageDao.java
package demo.dao;

import demo.entities.Language;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;

@Singleton
@Startup
public class LanguageDao {
    @PersistenceContext
    EntityManager em;

    public List<Language> listLanguages() {
        return em.createQuery("select l from Language l").getResultList();
    }

    @PostConstruct
    public void insertTestData() {
        Language java = new Language();
        java.setName("Java");
        em.persist(java);

        Language ruby = new Language();
        ruby.setName("Ruby");
        em.persist(ruby);

        Language groovy = new Language();
        groovy.setName("Groovy");
        em.persist(groovy);
    }
}

さて、テストクラスを作るときです。このチュートリアルの前半を実行していれば、次のコマンドは見慣れたものでしょう。

$ arquillian create-test --class demo.dao.LanguageDao.java --enableJPA
Picked up type <JavaResource>: demo.dao.LanguageDemoTest
Wrote /Users/paul/arquillian-demo/src/test/java/demo/dao/LanguageDemoTest.java

ここでまた、新しいテストを作成し、persistence.xmlをデプロイメントに追加します。IDEでこのテストを開き、 Language エンティティをデプロイメントに追加します。

テストアサーションを記述します:

src/test/java/demo/dao/LanguageDaoTest.java
@Test
public void testListLanguages() {
	Assert.assertEquals(3, languagedao.listLanguages().size());
}

おめでとう! Arquillianを使った二つ目の グリーンバー です!

別コンテナの追加

コンテナを追加するのは、セットアップコマンドをまた実行するだけで、簡単です。例えば、Glassfishを追加します。

$ arquillian setup --container GLASSFISH_3_1_REMOTE

Mavenプロファイルを変えると、コンテナが切り替わります。例えばForgeでは:

$ build test --profile glassfish-remote-3

デプロイメントパッケージのエクスポート

ファイルにエクスポートすると、デバッグにとても便利です。Forgeでは、以下のように行います。

まず、Arquillianテストに移動します:

$ cd src/test/java/demo/MySimpleBeanTest.java

デプロイメントをエクスポートします:

$ arquillian export

アーカイブはプロジェクトのtargetディレクトリにエクスポートされています。

Share the Knowledge

Find this guide useful?

There’s a lot more about Arquillian to cover. If you’re ready to learn more, check out the other available guides.

Feedback

Find a bug in the guide? Something missing? You can fix it by forking this website, making the correction and sending a pull request. If you’re just plain stuck, feel free to ask a question in the user discussion forum.

Recent Changelog

  • Apr 19, 2012: Remove redundant metadata (internal change) by Dan Allen
  • Apr 05, 2012: Add reference_rev prolog field for translations by Dan Allen
  • Apr 05, 2012: Use description in prolog for guide summary by Dan Allen
  • Feb 10, 2012: Identify authors & translators by site identity by Dan Allen
  • Jan 30, 2012: Add translator field to metadata by Dan Allen
  • Jan 30, 2012: Add translator as author by Takayuki Konishi
  • Jan 10, 2012: Japanese translation by Takayuki Konishi

See full history »