Maven上的每模块测试设置

时间:2015-03-02 21:25:48

标签: maven

在测试每个模块之前,Maven是否有办法在设置时运行一段代码?每个模块的清理也是一个优势。

举一个例子,假设我有模块A和B,测试类AA,AB,BA,BB和BC,每个都包含几种测试方法。因此模块A将运行测试类AA和AB,第一个包含测试方法AA.1和AA.2以及第二个AB.1和AB.2。

鉴于此,我希望测试设置运行如下:

  1. 在模块A之前
  2. 在AA级之前
  3. 在方法AA.1之前
  4. 方法AA.2之前
  5. AB班前
  6. 方法AB.1之前
  7. 方法AB.2之前
  8. 在模块B之前
  9. 课前BA
  10. 等等
  11. 设置大部分内容很容易,但我认为没有办法执行第1步和第8步,我也愿意。

    修改

    是的,这是应该进行集成测试的事情,但它不是,我们正在谈论几十个模块,更不用说测试了。我需要主要为每个模块准备这些资源,以便模块测试可以并行运行。

3 个答案:

答案 0 :(得分:1)

这不是一个很好的解决方案,但您可以随时将process-test-classes构建阶段附加一个任意插件和目标,该阶段默认在test之前运行。见http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference。显然,这段代码不会与测试代码在同一个JVM中运行,但是如果你想要准备一些外部资源,它可能是合适的。

如果您正在准备外部资源,那么您可能正在执行集成测试,因此pre-integration-test阶段就是您要附加的内容。

答案 1 :(得分:1)

这听起来像是集成测试。这意味着您可以使用pre-integration-testintegration-testpost-integration-test phase来定义进行相应测试所需的设置等。您可以将任何插件绑定到pre-integration-test阶段以进行某种设置(例如通过sql-maven-plugin等进行数据库设置)。

此外,您可以使用TestNG支持群组等,此外它还支持以下内容:

@BeforeSuite
@BeforeTest
@BeforeGroups
@BeforeClass
@BeforeMethod

答案 2 :(得分:0)

您可以在JUnit中通过在here概述的行上定义嵌套测试套件,在模块的子套件上使用@Before@After方法来实现。

然后你configure maven只运行新的测试套件,而不是单独的测试。

更加雄心勃勃,您可以根据命名惯例执行此操作,而无需通过以下方式指定所涉及的所有单个测试:

  • 设置动态AllTests顶级测试
  • 使用Guava ClassPath(或类似)查找所有可见的测试套件和测试类
  • 根据包层次结构
  • 将它们添加到顶层或嵌套的测试套件中