第10章 アプリケーションのテスト

10.1. コンテナーでのテスト

Arquillian を使用すると、実行中のアプリケーションにユニットテストを注入することができます。これにより、アプリケーションが正常に動作していることを確認できます。Thorntail にはアダプターがあり、これは Thorntail ベースのアプリケーションで適切に機能します。

前提条件

  • pom.xml ファイルがある Maven ベースのアプリケーション。

手順

  1. 6章BOM の使用 の説明に従って Thorntail BOM を追加します。

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>io.thorntail</groupId>
          <artifactId>bom</artifactId>
          <version>${version.thorntail}</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
  2. pom.xml ファイルの io.thorntail:arquillian アーティファクトを参照し、< scope&gt; を test に設定します。

    <dependencies>
      <dependency>
        <groupId>io.thorntail</groupId>
        <artifactId>arquillian</artifactId>
        <scope>test</scope>
      </dependency>
    </dependencies>
  3. アプリケーションを作成します。

    通常どおりにアプリケーションを作成します。設定するデフォルトの project-defaults.yml ファイルを使用します。

    thorntail:
      datasources:
        data-sources:
          MyDS:
            driver-name: myh2
            connection-url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
            user-name: sa
            password: sa
        jdbc-drivers:
          myh2:
            driver-module-name: com.h2database.h2
            driver-xa-datasource-class-name: org.h2.jdbcx.JdbcDataSource
  4. テストクラスを作成します。

    注記

    通常、Thorntail が存在している前に Arorntail が アーカイブ を作成する前にテストを作成し、アプリケーションが大きくなるという事実でアーカイブを作成し、目的は単一コンポーネントを分離してテストしていました。

    package org.wildfly.swarm.howto.incontainer;
    
    public class InContainerTest {
    }
  5. デプロイメントを作成します。

    マイクロサービスのコンテキストでは、アプリケーション全体が 1 つの小さなマイクロサービスコンポーネントを表します。

    @DefaultDeployment アノテーションを使用して、アプリケーション全体のデプロイメントを自動的に作成します。@DefaultDeployment アノテーションはデフォルトで .war ファイルが作成されます。Undertow はこのプロセスに関与しないため、ここでは該当しません。

    @DefaultDeployment アノテーションを、@RunWith(Arquillian.class) アノテーションと共に JUnit テストのクラスレベルに適用します。

    @RunWith(Arquillian.class)
    @DefaultDeployment(type = DefaultDeployment.Type.JAR)
    public class InContainerTest {

    Thorntail との統合によって提供される @DefaultDeployment アノテーションを使用すると、アーカイブを返す static メソッドで Arquillian @Deployment アノテーションを使用し ないください

    @DefaultDeployment アノテーションは、テストのパッケージを検査します。

    package org.wildfly.swarm.howto.incontainer;

    パッケージから、ヒューリスティックを使用して、同じパッケージに他のアプリケーションクラスがすべて含まれるか、Java パッケージ階層のより深く他のアプリケーションクラスを組み込みます。

    @DefaultDeployment アノテーションを使用すると、アプリケーションのサブパッケージの デフォルトデプロイメント のみを作成するテストを作成できますが、関連していないパッケージでテストを配置することを防ぎます。以下に例を示します。

    package org.mycorp.myapp.test;
  6. テストコードを作成します。

    通常どおりに、テストのタイプを作成します。これには、Enfacl 機能を使用した内部実行中のコンポーネントへのアクセスが含まれます。

    以下の例では、実行中のアプリケーションの InitialContext をテストケースのインスタンスメンバーにインジェクトするために使用されます。

    @ArquillianResource
    InitialContext context;

    つまり、test メソッド自体がその InitialContext を使用して、project-defaults.yml を使用して設定したデータソースをライブかつ利用できる状態にすることができます。

    @Test
    public void testDataSourceIsBound() throws Exception {
        DataSource ds = (DataSource) context.lookup("java:jboss/datasources/MyDS");
        assertNotNull( ds );
    }
  7. テストを実行します。

    Arquillian は JUnit との統合を提供するため、Maven または IDE を使用してテストクラスを実行できます。

    $ mvn install
    注記

    多くの IDE で右クリックし、Run を選択してテストクラスを実行します。