TestNGを使用して、グラスフィッシュ3.1.2.2が組み込まれたArquillianを使用して統合テストを作成しています。これらのテストを並行して実行できるようにしたいのですが、この場合、glassfish ポートとデータベース名を動的に構成する必要があります (このセットアップは既にあり、arquillian テストで再利用したいと考えています)。私が欠けているのは、データベースを準備し、フリーポートを検索し、グラスフィッシュ構成 (domain.xml、glassfish-resources.xml の場合もあります) を更新できる「コンテナ開始前」フックです。これに対する「クリーンな」解決策はありますか、それとも私のユースケースは Arquillian 開発者によって予見されていませんでしたか?
私が現在解決したハックな方法は、arquillian の beforeSuite メソッドをオーバーライドすることですが、これはテストの起動時とコンテナー内で 2 回呼び出されます (したがって、私の哀れな静的フラグ)。次に、arquillian の before スイートをインターセプトする方法がないため、このソリューションは JUnit ベースのテストでは機能しません。
public class FullContainerIT extends Arquillian {
private static boolean dbInitialized;
//@RunAsClient <-supported by @Test only
@Override
@BeforeSuite(groups = "arquillian", inheritGroups = true)
public void arquillianBeforeSuite() throws Exception {
if (dbInitialized == false) {
initializeDb();
dbInitialized = true;
}
super.arquillianBeforeSuite();
}
}
私が
持っていたいくつかのアイデア:
+ Arquillian JavaDocsでイベント を見たことがありますが、Arquillian イベントをリッスンする方法がわかりません。+ ShrinkWrap Descriptorを作成する
可能性があることを確認しましたが、これらは Glassfish リソースをサポートしていません。@BeforeSuite @RunAsClient
@RunAsClient
@Test
org.jboss.arquillian.container.spi.event.container.BeforeStart
@Deployment