3

ホイ!

私が発見した問題は非常に理解しやすいですが、解決策が見つかりません。

まず、この小さなスニペットを提供させてください。

@Deployment
public static Archive<?> createDeployableArchive () {
    JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "whoCares.jar");
    // enable CDI
    jar.addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml");

    // Some persistence
    jar.addAsManifestResource("test-persistence.xml", "persistence.xml");

    // Now the interisting part (simplified):

    jar.addClass(RegistrationService.class) // This one should be tested
        .addClass(RegistrationException.class) // Will be thrown on error.
        .addClass(UserDAO.class) // Used by RegService
        .addClass(User.class) // JPA Entity
        // ... 
        // ...   This scenario goes without interfaces, inheritance, DTOs, different
        // ...   types of exceptions for different problem types... That's why the list
        // ...   is so concise.
        // ...
        .addClass(RegServiceIntegrationTest.class); // Test class must be included

    return jar;
}

registerUser などの特定のユース ケースを arquillian でテストするたびに、登録プロセスが依存するすべてのクラスを収集し、デプロイ可能なアーカイブにまとめる必要があります。

これを手動で行うと時間がかかり、問題やエラーが発生することは間違いありません。いくつかの弱点があります。

収集:多くのサブ サービス、例外、インターフェイス、スーパー クラス、ユーティリティなどを含む長いプロセスを考えてみてください。それらをすべて見つけるために、完全なフローを見ていきます。正直なところ、それは繰り返しの長期的な仕事であり、目を痛めるでしょう. 怒鳴り始める前に、ほんの数回それをしなければなりませんでした。

テストを最新の状態に保つ:登録チェーンに新しいサブサービスを含めるとします。これらのいまいましい依存関係を更新する必要があり、1 日の終わりに統合テストを実行したときに何か問題が発生した場合は、不完全な例外メッセージを掘り下げるのが楽しいでしょう (不完全な原因は、ある時点で何かが欠けていることだけを知っているだけで、何が欠けているかはわかりません)。まさに)。運が良ければ ClassNotFoundException が発生します。もちろん、1 つの変更は複数のテストに簡単に影響を与える可能性があります。2. 人生の時間を無駄にします。

パッケージの追加に関する問題: パッケージの追加は Shrinkwrap によって提供されますが、それを使用するのは悪い考えです。長い一日の後に怠惰に感じて完全なパッケージを追加するだけで、すべてのクラスが同じパッケージに永遠に残ることを絶対に確信できますか? もう 1 つの問題は、「マイクロ展開」という用語がコンパクトさの必要性を暗示していることです。パッケージ全体でオーバーヘッドが発生します。これは、ここでの最小の問題だと思います。

これを解決する方法は?

必要なすべての情報がソースコードですでに利用可能であることは、一種の平凡です。

最善の解決策は次のようなものです。

@Deployment
public static Archive<?> createDeployableArchive () {
    JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "whoCares.jar");

    // enable CDI
    jar.addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml");

    // Some persistence
    jar.addAsManifestResource("test-persistence.xml", "persistence.xml");


    Class<?>[] involved;
    involved = Tool.findInvolvedClasses("RegistrationService.java", "registerUser");
    jar.addClasses(involved);

    return jar;
}

正確な「フロー」を知る必要があるため、リフレクションを使用してこれを達成できるとは思いません。

意図しない用途に使用できるクールなツールがあるに違いありません。もちろん他の方法もあるかもしれません。誰かがアイデアを持っていますか?ありがとう!

4

1 に答える 1

0

JBoss Tools で Arquillian 統合を試すことができます。この GitHub リポジトリで、使用方法に関する情報を見つけることができます。README を参照してください。そこにリンクされているスクリーンキャストが役に立つかもしれません。

JBoss Tools の使用を開始するには、JBT 更新サイトから既存の Eclipse Kepler (e4.3) 以降のインストールにインストールできます。手順は次のとおりです。

これは現時点では実験的なものと見なされているため、JBoss Developer Studio (Eclipse といくつかのプラグインをパッケージ化するディストリビューション) には含まれておらず、JBoss Tools などのコミュニティ ビットでのみ利用可能です。JBoss Tools JIRAで発生した問題 (または新しい機能のリクエスト) を報告していただければ幸いです ( testing-tools コンポーネントを使用してください)。

于 2013-11-07T17:29:58.780 に答える