0

这里是背景。

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

现在我们需要转到 Maven 构建结构。问题是 maven 只运行类名具有命名约定“测试”的 junit。

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

另外,有没有办法可以提取所有具有“@Test”注释的方法?

如果您需要任何进一步的信息,请告诉我。

4

4 回答 4

2

仅仅因为您以前使用 Ant 就那样做,并不意味着现在继续使用它是正确的。现在您已经迁移到 Maven,您必须遵守它的做事方式并遵循它的约定。其中之一是将您的生产代码与测试分开。混合没有意义,因为您实际上是在用无用的(对于您的代码的客户)方法乱扔代码。虽然您可以继续这样做并找到解决方法,但这不是选择的高标准路线。

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

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

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

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

  • 将仅由测试使用的所有资源移动到您的src/test/resources目录。

于 2013-10-29T10:39:02.383 回答
1

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

<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>
于 2013-10-28T21:05:48.943 回答
0

我假设既然您使用的是 ant,那么您有一个测试套件吗?如果是这样,最简单的方法是更改​​配置以使用给定的测试套件:

<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 运行。

于 2013-10-28T18:02:12.727 回答
0

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

实际上,如果您的“测试类”没有放在测试文件夹中,则意味着您不打算在 Maven 构建操作中将它们作为“测试”运行。

于 2016-08-27T15:59:32.530 回答