Java Maven:手动测试的源文件夹

Java Maven:手动测试的源文件夹,java,eclipse,unit-testing,maven,junit,Java,Eclipse,Unit Testing,Maven,Junit,我希望在eclipse中有一个源文件夹,它被视为测试源,但在测试阶段被忽略。它将包含单元测试和其他只能手动执行的代码 它必须在eclipse中显示并编译为源文件夹 它必须使用具有测试范围的依赖项进行编译 它将包含单元测试 这些单元测试不得在maven生命周期的任何阶段执行 代码不能打包为生成的一部分 我还有一个用于单元测试的源文件夹,它将在测试阶段执行 这可能吗?如果可能,那么如何实现?是在构建过程中运行测试的插件。根据 默认情况下,Surefire插件将自动包含具有以下通配符模式的所有测试

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

  • 它必须在eclipse中显示并编译为源文件夹
  • 它必须使用具有测试范围的依赖项进行编译
  • 它将包含单元测试
  • 这些单元测试不得在maven生命周期的任何阶段执行
  • 代码不能打包为生成的一部分
  • 我还有一个用于单元测试的源文件夹,它将在测试阶段执行
这可能吗?如果可能,那么如何实现?

是在构建过程中运行测试的插件。根据

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

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

是在构建过程中运行测试的插件。根据

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


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

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

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

的所有黑魔法。maven的设计目的是强制您使用标准的项目设置。虽然有些偏差是可能的,但有时最好看看解决问题的标准方法

有两种解决方案:

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

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

    Assume.that(Boolean.getBoolean("runManualTests"));
    
    现在可以通过向VM参数添加
    -DrunManualTests=true
    来运行这些测试。Eclipse允许您导出启动配置,这样您就可以创建一对启动配置,并将它们放入您的项目中,以便轻松地运行测试

  • 解决阻止您一直运行所有测试的根本问题。他们太慢了?使用CI服务器。它们很脆吗?好吧,让它们更稳定。为此,我需要更多地了解您的具体原因


  • Maven旨在强制您使用标准项目设置。虽然有些偏差是可能的,但有时最好看看解决问题的标准方法

    有两种解决方案:

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

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

    Assume.that(Boolean.getBoolean("runManualTests"));
    
    现在可以通过向VM参数添加
    -DrunManualTests=true
    来运行这些测试。Eclipse允许您导出启动配置,这样您就可以创建一对启动配置,并将它们放入您的项目中,以便轻松地运行测试

  • 解决阻止您一直运行所有测试的根本问题。他们太慢了?使用CI服务器。它们很脆吗?好吧,让它们更稳定。为此,我需要更多地了解您的具体原因


  • 这是一个额外的测试文件夹。我已经使用了buildhelper,因为我认为我需要它,以便有第二个测试源文件夹。重新考虑后,删除了我的最后一条评论。如果继续使用正常的测试目录,您可能会发现生活更轻松