Maven测试模块

时间:2013-08-29 11:17:41

标签: java maven

我正在运行具有结构的项目,假设运行时模块(或者你称之为插件),就像C风格的.so对象一样。目前它只能通过ClassLoader工作,而我正在尝试使用maven来测试它。我在项目的测试目录中写了Test.javaTestModule.java个文件。但是maven尝试只运行它们Test.java。如何指定测试文件?

P.S。是否有任何系统用于加载除ClassLoader之外的模块?而新的外国模块必须是项目取决于我的核心项目?

2 个答案:

答案 0 :(得分:4)

Maven - 与任何其他构建系统一样 - 需要区分生产代码和测试代码。建议的变体是使用目录结构分隔两个类:

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

如果您的项目具有不同的结构,您可以change pom.xml文件中的默认行为(不推荐):

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

如果你将生产和测试代码放在同一目录中(不好,不好),你可以告诉Maven include or exclude类运行测试:

<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>

答案 1 :(得分:2)

Maven使用maven-surefire-plugin来运行测试。因此它执行test 目标

includes属性定义了哪些类将被视为测试类。默认名称模式为:

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

因此,如果您不希望在maven测试阶段执行测试(可能因为您只想手动运行此测试)而不是更改includes属性或重命名您的类(例如CheckModule而不是TestModule) )。

如果您的TestModule.java是应用程序代码而不是某种测试代码而不是将其放在测试目录中。看看Maven default directory layout并在某种可能的情况下使用它。