0

最近、Arquillian について学び始めました。入門チュートリアルに従って、リモート、組み込み、およびマネージド コンテナーについて説明する「コンテナーの種類」について学びました。Arqillian がこれらのさまざまな種類をどのように扱うかについて少し混乱しています。

私の質問は: 入門チュートリアルの最初の例 (TemparatureConverter を含む) では、JBoss AS 6 をリモート コンテナとして使用しています。私が理解したのは、TemparatureConverter Bean を含むメイン アプリケーション アーカイブが JBoss AS 6 (独自の VM で実行されている) にデプロイされ、Test クラスが別の VM で実行されるということです。

TemparatureConverter.java ie Bean クラスにいくつかのログ メッセージを追加しました。

public double convertToCelsius(double f) {
    System.out.println("@@@@@@@@@@Inside container: convertToCelsius");
    return ((f - 32) * 5 / 9);
}

public double convertToFarenheit(double c) {
    System.out.println("@@@@@@@@@@Inside container: convertToFarenheit");       
    return ((c * 9 / 5) + 32);
}

また、いくつかのログ メッセージを Test クラスに追加しました。

@Test
    public void testConvertToCelsius() {
        System.out.println("@@@@@@@@@Inside Junit client");
        Assert.assertEquals(converter.convertToCelsius(32d), 0d);
        Assert.assertEquals(converter.convertToCelsius(212d), 100d);
    }

JBoss AS を起動し、コマンド ラインから次のように入力してテスト ケースを実行します。mvn test -Pjbossas-remote-6

Bean クラスに追加したログ メッセージは JBoss コンソールに出力され、Test クラスに追加したログ メッセージは Maven コンソール ウィンドウに出力されると考えていました。これら 2 つのことは別の VM で実行されているためです。

しかし、それは起こらず、すべてのログ メッセージが JBoss AS コンソールに出力されていることがわかりました。

つまり、私のテスト ケースは Bean クラスと共に JBoss AS コンテナ内で実行されています。

もしこれが本当なら、遠隔性はどこにあるのでしょうか? つまり、テスト ケースと Bean の両方が同じ JVM 内で実行されています。これは「埋め込みコンテナー」の動作に似ていますね。

私はこの説明を参照しています:

a remote container resides in a separate JVM from the test runner; Arquillian binds to the container to deploy and undeploy the test archive and invokes tests via a remote protocol (typically HTTP)

しかし、この場合、Arquillian は同じ JVM に Bean クラスとともにテスト ケースを配置しているようです。

私の質問が明確でない場合はお知らせください。

4

1 に答える 1

2

はい、Arquillian はターゲット コンテナーでテストされているコードと共にテスト ケース クラスをデプロイしています。

ドキュメントを引用するには:

Arquillian は実行時に ShrinkWrap で定義されたアーカイブをパッケージ化し、それをターゲット コンテナーにデプロイします。次に、テスト メソッドの実行をネゴシエートし、サーバーとのリモート通信を使用してテスト結果を取得します。

したがって、「リモート性」に関して、Arquillian が提供するのは、テストを「リモートで」開始し、「ローカルで」実行されたかのように結果を開発者に提示する方法です。売り込みは、展開を気にする必要はなく、独自の開発環境でテストを実行できるというものです。

リモート コンテナーと組み込みコンテナーの違いは、コンテナーの実行方法になります。リモートとは、テストが実行される前に、開発環境と並行してコンテナーが実行されていることを意味します。また、組み込みは、テストの開始時にコンテナーを実行するだけであるという価値を追加します。

于 2011-07-06T14:09:56.760 に答える