0

Cスタイルの.soオブジェクトのように、ランタイムモジュール(またはプラグインと呼んでいます)を想定した構造でプロジェクトを実行しています。今のところ、経由ClassLoaderでのみ機能し、maven を使用してテストしようとしています。プロジェクトのテストディレクトリにファイルTest.javaを書きました。TestModule.javaしかし、maven は、代わりに両方を実行しようとしますTest.java。テストファイルを指定するにはどうすればよいですか?

PS以外にモジュールをロードするためのシステムはありますClassLoaderか? そして、新しい外部モジュールは、私のコアプロジェクトに依存するプロジェクトでなければなりませんか?

4

2 に答える 2

4

Maven は、他のビルド システムと同様に、運用コードとテスト コードを区別する必要があります。推奨されるバリアントは、ディレクトリ構造を使用して両方のクラスを分離することです。

/src
  /main
    /java
      -- your production classes go here
  /test
    /java
      -- your test classes go here

プロジェクトの構造が異なる場合は、ファイル内のデフォルトの動作を変更pom.xmlできます (推奨されません)。

<build>
  <sourceDirectory>${basedir}/src/</sourceDirectory>
  <testSourceDirectory>${basedir}/test</testSourceDirectory>
  <outputDirectory>${basedir}/bin</outputDirectory>
  <testOutputDirectory>${basedir}/test-bin</testOutputDirectory>
  ...
</build>

実稼働コードとテスト コードの両方を同じディレクトリに置く場合 (良くない、良くない)、実行中のテストからクラスを含めたり除外したりするように Maven に指示できます。

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
      <includes>
        <include>Test.java</include>
      </includes>
    </configuration>
  </plugin>
</plugins>

テスト クラスを識別するには、何らかの命名規則が必要です (推奨: クラスMyClassの場合、対応するテスト クラスを呼び出す必要がありますMyClassTest)。

      <includes>
        <include>**/*Test.java</include>
      </includes>
于 2013-08-29T11:22:13.927 に答える
2

Maven はmaven-surefire-pluginを使用してテストを実行します。そのため、テスト ゴールを実行します。

includesプロパティは、テスト クラスと見なされるクラスを定義します。デフォルトの名前パターンは次のとおりです。

<includes>
 <include>**/Test*.java</include>
 <include>**/*Test.java</include>
 <include>**/*TestCase.java</include>
</includes>

そのため、Maven テスト段階でテストを実行したくない場合 (このテストを手動でのみ実行したいため)、includesプロパティを変更するか、クラスの名前を変更します (TestModule ではなく CheckModule など)。

TestModule.javaアプリケーション コードであり、ある種のテスト コードではない場合は、テスト ディレクトリに配置しないでください。Maven のデフォルト ディレクトリ レイアウトを確認し、可能であればそれを使用してください。

于 2013-08-29T11:29:37.927 に答える