2

マルチモジュールのMavenプロジェクト(たとえばfoo-web)にWARモジュールがあり、Webサービスを実現しています。次に、foo-cliがあります。これは、Webサービスクライアントを実装し、いくつかの単体テストでテストします。

これを機能させるために、テストフェーズの前に次のようにJettyを起動します。

<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>foo-web</artifactId>
  <version>${project.version}</version>
  <type>war</type>
  <scope>test</scope>
</dependency>         
...
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.5.v20120716</version>
   <configuration>

     <scanIntervalSeconds>10</scanIntervalSeconds>
     <useTestScope>true</useTestScope>
     <connectors>
       <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
         <port>8080</port>
         <maxIdleTime>60000</maxIdleTime>
       </connector>
     </connectors>
   </configuration>

<executions>
    <execution>
      <id>start-jetty</id>
      <phase>process-test-classes</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <scanIntervalSeconds>0</scanIntervalSeconds>
        <daemon>true</daemon>
      </configuration>
    </execution>
   </executions>          
</plugin>

これは、foo-cliモジュール内から「mvntest」を実行している間は完全に機能します(他に何も指定する必要がなく、自動的に停止します)。ただし、上位レベル(foo)に移動して、そこから「mvn test」を発行しようとすると、つまり、プロジェクト内のすべてのモジュールに対してすべてのテストを実行しようとすると、「404-見つかりません」で失敗します。出力から、オーバーレイ(戦争依存関係)が完全に無視されているように見えることがわかります。

助けてくれてありがとう。

4

1 に答える 1

4

統合テストをトップレベルのプロジェクトに移動してみてください。このようにして、WARアーティファクトが構築された後に実行されます。

Mavenフェイルセーフプラグインを見たことがありますか?これは、実際には統合テストであり、単体テストではない、あなたが行っているようなことのために設計されています。integration-testこのページでは、統合テストにフェーズを使用する理由について、いくつかの良いアドバイスを提供しています。

つまり、すべてを適切に破棄できるように、start-jettyその間に実行する理由などを説明します。pre-integration-test

于 2012-10-08T15:15:15.313 に答える