第10章 アプリケーションのテスト
10.1. コンテナーでのテスト
Arquillian を使用すると、実行中のアプリケーションにユニットテストを注入することができます。これにより、アプリケーションが正常に動作していることを確認できます。Thorntail にはアダプターがあり、これは Thorntail ベースのアプリケーションで適切に機能します。
前提条件
-
pom.xml
ファイルがある Maven ベースのアプリケーション。
手順
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>
pom.xml
ファイルのio.thorntail:arquillian
アーティファクトを参照し、<scope>
; をtest
に設定します。<dependencies> <dependency> <groupId>io.thorntail</groupId> <artifactId>arquillian</artifactId> <scope>test</scope> </dependency> </dependencies>
アプリケーションを作成します。
通常どおりにアプリケーションを作成します。設定するデフォルトの
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
テストクラスを作成します。
注記通常、Thorntail が存在している前に Arorntail が
アーカイブ
を作成する前にテストを作成し、アプリケーションが大きくなるという事実でアーカイブを作成し、目的は単一コンポーネントを分離してテストしていました。package org.wildfly.swarm.howto.incontainer; public class InContainerTest { }
デプロイメントを作成します。
マイクロサービスのコンテキストでは、アプリケーション全体が 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;
テストコードを作成します。
通常どおりに、テストのタイプを作成します。これには、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 ); }
テストを実行します。
Arquillian は JUnit との統合を提供するため、Maven または IDE を使用してテストクラスを実行できます。
$ mvn install
注記多くの IDE で右クリックし、
Run
を選択してテストクラスを実行します。