0

我正在运行具有假设运行时模块(或插件,但你称之为)的结构的项目,如 C 风格的 .so 对象。目前它只能通过 工作ClassLoader,我正在尝试使用 maven 来测试它。我在项目的测试目录中编写Test.javaTestModule.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属性或重命名您的类(例如 CheckModule 而不是 TestModule)。

如果您TestModule.java是应用程序代码而不是某种测试代码,则不要将其放在测试目录中。看看Maven 默认目录布局并尽可能使用它。

于 2013-08-29T11:29:37.927 回答