Maven:手动测试的源文件夹

时间:2014-05-28 10:33:47

标签: java eclipse unit-testing maven junit

我想在eclipse中有一个源文件夹,它被视为测试源,但在测试阶段被忽略。它将包含单元测试和其他只能手动执行的代码。

  • 它必须出现并编译为eclipse中的源文件夹
  • 它必须使用具有测试范围的依赖项进行编译
  • 它将包含单元测试
  • 在maven生命周期的任何阶段都不得执行这些单元测试
  • 代码不得打包为构建
  • 的一部分
  • 我还有一个用于单元测试的源文件夹,它将在测试阶段执行

这是可能的,如果是,那么如何?

3 个答案:

答案 0 :(得分:3)

Maven旨在强制您使用标准项目设置。虽然可能存在一些偏差,但有时最好以标准方式解决问题。

一些解决方案:

  1. 将项目拆分为多个模块。您可以将所有此类测试移动到新模块中。在Eclipse中,您只需导入所有模块。在Maven POM中,默认配置文件不包括新模块。 Eclipse可以记住您希望为项目激活哪些配置文件,因此您可以通过静态配置获得不同的行为。

  2. 使用JUnit.Assume。简而言之,假设在不使其失败的情况下中止测试。它有点像@Ignore。因此,混合测试,但将此行添加到您只想手动运行的所有测试中:

    Assume.that(Boolean.getBoolean("runManualTests"));
    

    现在,您可以通过向VM参数添加-DrunManualTests=true来运行这些测试。 Eclipse允许您导出启动配置,以便您可以创建一对并将它们放入项目中以轻松运行测试。

  3. 解决潜在问题,阻止您始终运行所有测试。他们太慢了?使用CI服务器。他们很脆弱?好吧,让它们更稳定。为此,我需要了解更多有关您具体原因的信息。

答案 1 :(得分:0)

Maven Surefire Plugin是在构建期间运行测试的插件。根据{{​​3}} ...

  

默认情况下,Surefire插件会自动包含具有以下通配符模式的所有测试类:

- "**/Test*.java" - includes all of its subdirectories and all java filenames that start with "Test".
- "**/*Test.java" - includes all of its subdirectories and all java filenames that end with "Test".
- "**/*TestCase.java" - includes all of its subdirectories and all java filenames that end with "TestCase".

因此,您可以轻松编写不遵循上述模式的测试类,并仍将它们放入src/test/java目录中。在任何IDE中,这意味着他们可以像其他IDE一样访问(测试)构建路径,并且可以从该IDE轻松执行它们。但它们不是由Maven执行的。

答案 2 :(得分:0)

我认为你是从错误的角度看待它。如果我是你,我会创建一个<profile/>并在maven-surefire-plugin设置(配置文件中)中定义,当激活此配置文件时应执行*My*Test。实际上,我会创建两个单独的配置文件 - 一个是<activeByDefault/>(将排除My*Test并且只有在未从命令行指定<property/>时才会被激活;以及基于属性<activation/>的另一个配置文件 - 例如,您将通过传入-Dmy.test.property手动触发此配置文件。这样你就可以避免使用build-helper-maven-plugin的所有黑魔法。