ShrinkWrapについて、その1
棚卸し3日目。Arquillianでテストアーカイブを作る際に欠かせないShrinkwrapフレームワーク。簡単なプロジェクトなら[1]の例のように指定してやればいいいんだけど、プロジェクトが複数に渡っていたり、複雑な依存関係のあるクラスのテストの場合は、テストアーカイブの作成自体が大変では意味がない。いくつか考慮すべきことがあるが、例えば再帰的なクラスの追加に関してはこんなFeature Requestが上がっているが今のところ動きはない様子。
一方、Mavenを利用したResolverはすでにあって、[2]のようにpom.xmlを読み込んで特定のクラスやパッケージやなんならdependency以下まるごとテストアーカイブに含めることができる。
[1] ShrinkWrapの例(全体については昔のエントリを参照のこと):
@RunWith(Arquillian.class) public class MemberRegistrationTest { @Deployment public static Archive<?> createTestArchive() { return ShrinkWrap.create(WebArchive.class, "test.war") .addClasses(Member.class, MemberRegistration.class, Resources.class) .addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml") .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); } //以下略 }
[2] Maven Resolverの例(Andrewのブログから):
Maven.configureResolver().fromFile(“pom.xml”).resolve(“commons-collections:commons-collections”).withTransitivity().as(File.class);
大規模なプロジェクトで実際にどうするのが正しいのか、今後ShrinkWrapはどういう部分の解決を考えているのか、12月5日のJBoss 冬将軍で直接Andrew本人に聞いてみるつもり。