maven到自动拉依赖项测试jar

maven到自动拉依赖项测试jar,maven,maven-plugin,Maven,Maven Plugin,如何获取pom.xml中包含的依赖项的tests.jar,而不显式指定测试范围对工件的依赖。 例如:我的pom.xml包含“n”个依赖项,其中大多数也包含tests.jar。当我使用这个pom运行mvn:test时,我也想获取这些依赖项测试并运行它们(因为父pom是聚合器,希望运行测试以确保集成不会破坏东西)。 如果我包括这些“n”依赖项的测试工件的依赖项,并使用maven surefire插件和dependenciesToScan组合(如下所示),我就能够运行测试。 但这需要我在每次为依赖项构

如何获取pom.xml中包含的依赖项的tests.jar,而不显式指定测试范围对工件的依赖。 例如:我的pom.xml包含“n”个依赖项,其中大多数也包含tests.jar。当我使用这个pom运行mvn:test时,我也想获取这些依赖项测试并运行它们(因为父pom是聚合器,希望运行测试以确保集成不会破坏东西)。 如果我包括这些“n”依赖项的测试工件的依赖项,并使用maven surefire插件和dependenciesToScan组合(如下所示),我就能够运行测试。 但这需要我在每次为依赖项构建测试jar或添加新的依赖项时编辑pom.xml


org.apache.maven.plugins
maven surefire插件
2.15
组别:artifact1
组别:artifact2
..
..
组
人工制品1
版本
试验罐
测试
组
人工制品2
版本
试验罐
测试
....
...

如果不添加对测试工件的显式依赖性,是否也可以自动拉取并运行依赖项的测试(当然不是针对所有依赖项,而是针对少数匹配特定组Id的依赖项)

我觉得这不是一个明智的策略。在构建每个依赖项时,测试将已经运行

除非您在测试之间创建了依赖关系(如更改类路径上JAR的顺序将更改测试结果),否则从其他项目再次运行它们不会产生任何影响

如果当类路径上JAR的顺序发生变化时,您的测试开始中断或表现不同,那么我建议您查看您的版本控制系统,并与编写该测试的人员交谈

[编辑]回复以下第一条评论:

我去过那里。您所描述的是集成测试(IT)。首先,对他们要非常非常小心。它很脆弱,是资源的无底洞。如果你不小心,你会用自己的工作扼杀自己。另见:

在此免责声明之后,以下是我驯服野兽的策略:

  • 确保测试是独立的。总是

  • 创建一个依赖于WAR模块的新模块。这包含了你的ITs-它可以看到整个世界,可以有自己的设置和配置,如果需要,它可以部署战争

  • 记住,错误不是随机的这只对您有利一次。所以您需要做的是在Spring配置中添加检查bug的测试。测试应该加载spring配置并进行如下检查:我们是否看到了预期的bean?有正确的覆盖吗?豆子丢了吗


  • 当您添加测试时,缺陷率将下降,因为测试将覆盖您的团队通常会犯错误的领域。

    首先,如果我们讨论的是单元测试,则上述设置没有意义。您忽略了Maven的概念,因为每个模块都应该在模块中有它的单元测试,并且它们在打包生成的jar文件之前的生命周期中运行

    文件夹布局如下所示:

      +-- pom.xml
      +-- src/
           +-- main
                +--- java (Production code)
           +-- test
                +--- java (Unit Test code)
    
    因此,给定的测试代码旨在对生产代码进行单元测试。这意味着单元测试将在该工件的构建和打包期间运行,而不是打包之后运行。如果是这样的话,我们讨论的是应该以不同方式处理的集成测试


    您正在使用的测试jar用于不同的用途。它用于具有公共类,这些类由多个单元测试使用,这些单元测试提供了在单元测试中重用代码的机会。

    您上次的编辑没有改善结果。粘贴XML,选择它,然后使用编辑器上方的小“代码”按钮将其转换为代码。这是一个使用ant JUnit的简单任务配置。我的用例是:有一个POM项目来构建war文件。这场战争依赖于“n”个java项目。所有java项目都是基于spring的,war项目定义了spring引导配置。此根配置包括来自Java项目的spring配置。当战争最终建立时,我想确保没有任何东西会破坏w.r.t spring根配置。我理解。我也在那里。请看我的编辑如何解决它。请看我对@Aaron response@Jack的回复中的评论。但这是集成测试。在那里,您应该创建一个单独的模块it,在那里您可以使用cargo将war文件部署到Tomcat等,或者可以是aquirillian,在真实环境中对产生的war进行集成测试。