如果测试不在测试目录但在主目录中且类名没有像。* Test这样的关键字,如何在maven中运行JUnit Test。

时间:2013-10-28 17:21:37

标签: java unit-testing maven junit

这是背景。

我正在开发一个使用ant build的项目。当我们用来创建一个新类时,我们使用jun支持在同一个类中编写junit测试。类名没有'Test'命名约定。有超过800个Junit测试。

现在我们需要转移到Maven构建结构。问题是maven只运行junit,其中类名具有命名约定'Test'。

如何运行src / main / java / *中的junit测试?

另外,有没有办法可以拉出所有带有'@Test'注释的方法?

如果您需要任何进一步的信息,请与我们联系。

4 个答案:

答案 0 :(得分:2)

仅仅因为你曾经像Ant一样这样做,现在不能继续使用它。现在你已经搬到了Maven,你必须遵守其做事方式并遵循其惯例。其中之一是将您的生产代码与测试分开。混合没有意义,因为实际上你乱用你的代码(对于你的代码的客户端)方法。虽然您可以继续这样做并找到解决方法,但这不是选择的高标准途径。

下一步你真正需要做的是安排一些重构时间并执行以下任务:

  • 创建src/test/java(和 - src/test/resources)。

  • 为包含*Test注释方法的每个类创建一个@Test类,并将其放在src/test/java下。

  • 将这些方法移动到相应的新类中。

  • 将所有仅供测试使用的资源移至src/test/resources目录。

答案 1 :(得分:1)

您必须更改运行测试的Surefire plugin的配置。我还没有测试过,但你可以试试这个配置:

<build>
  <testSourceDirectory>src/main/java</testSourceDirectory>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.16</version>
      <configuration>
        <includes>
          <include>**/*.java</include>
        </includes>
      </configuration>
    </plugin>
  </plugins>
</build>

答案 2 :(得分:0)

我假设你使用蚂蚁,你有一个测试套件?如果是这样,最简单的方法是更改​​配置以使用给定的测试套件:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.12.4</version>
  <configuration>
    <includes>
      <include>AllTest.class</include>
    </includes>
  </configuration>
  </plugin>

但是,我不确定它是否会在src文件夹中查找,因此您可能必须将测试套件移动到测试目录。

至于拉动所有带有@Test注释的方法(我假设没有套件?),如果你没有遵循确定的测试类命名约定,你必须自己这样做。制作自己的测试运行器实现并不太难以搜索类路径或子文件夹中的所有类,并找到符合条件的所有类并将其传递给Junit以运行。

答案 3 :(得分:0)

如果您正在使用eclipse,您仍然可以将其作为Junit测试执行。

事实上,如果您的测试类&#34;没有放入测试文件夹,这意味着你不打算将它们作为&#34;测试&#34;在maven构建行动。