1

テストが必要な既存のJavaアプリケーション(「WebApp」と呼びましょう)のソースコードが提供されました。WARファイルとしてGlassfishにデプロイされます。これはお客様のコードですので、お手伝いできる場合はWebAppPOMの変更を避けたいと思います。

そのため、テストを行うために(Eclipseで)別のプロジェクトを作成しています。新しいプロジェクトでは、さまざまなWebAppクラスでメソッドを直接呼び出す必要があります。WARファイルをMaven依存関係として参照しようとしましたが、これを行った後、EclipseのMaven依存関係に表示されません-以下を参照してください。

WebApp
    src/main/java
    ...
    pom.xml

WebAppTest
    src/main/test
        test.package.name
            webAppAcceptanceTestIT.java
    Maven Dependencies
        junit-4.6.jar
        mockito-all-1.9.5.jar
        <<< No WebApp war/jars here >>>

WebAppTestのpomの依存関係は次のようになります。

<dependency>
    <groupId>...</groupId>
    <artifactId>webapp</artifactid>
    <version>...</version>
    <type>war</type>
    <scope>compile</scope>
</dependency>

試しtype=jarてみscope=testましたが、どちらも成功していません。私が何かを見逃しているのか、これを間違った方法で行っているのかわかりませんか?代わりにMavenモジュールを使用する必要がありますか?物事を過度に複雑にしたくない。もちろん、WebAppをごま​​かしてWebAppTestのビルドパスに追加することはできますが、これを正しく実行して、デプロイ時に機能するようにします。

もう1つのq-WebAppTestをWARまたはJARとしてパッケージ化する必要がありますか?WebAppコードを実行して結果を確認するテストのみが含まれます。それでもWARファイルとしてGlassfishにデプロイする必要があると思いますか?

4

1 に答える 1

2

優先度の高い順にいくつかのオプションがあります。

受け入れテストに HTTP (のみ) を使用する

war をデプロイし、HTTP リクエストを送信し、データベースを個別にチェックします。Web アプリケーションのクラスへのアクセスは必要ありません。これは最もクリーンなオプションであり、最もメンテナンスしやすいオプションです。

コンテナ内試験

Arquillian を使用して、テストと共にアプリケーションをデプロイし、実行します。元の戦争のPOMでの構成に追加attachClassesする必要があります。maven-war-pluginテスト プロジェクトは[artifactid]-classesではなく に依存する必要がありartifactidます。テストは Glassfish 内で実行されます (Arquillian は Glassfish の起動と war の展開を扱います)。

Arquillian には学習曲線が少しあります。

WebApp クラスをリモートで公開する

Spring の HTTPInvoker などを使用して、テストするクラスをテスト コードに公開します。テストは Glassfish とは別の JVM で実行され、HTTP を使用してテスト対象のクラスに接続します。コンテナ内の場合と同様に、POM を変更する必要があります。WAR が Spring ベースでなく、元のアプリケーションにかなり侵襲的である場合、これは注意が必要です。シリアライゼーションで問題が発生する場合もあります。

于 2013-01-16T15:58:02.597 に答える