给定一个具有多个测试源根的Maven模块,我们如何限制maven-surefire-plugin
仅从一个特定根运行测试?
用例如下所示:我希望有多个测试目录,并根据maven配置文件选择它们,例如-P only-tests-in-directory-A
或-P only-tests-in-directory-B
。
我知道include
和exclude
配置选项,但是它们只对包/类名起作用,这不是很好,因为在所有的测试根中,测试可能被类似地命名。
还有一个testSourceDirectory
配置选项,但根据文档,它仅与testNG报告相关。
2条答案
按热度按时间ippsafx71#
在Maven中最重要的事情是在配置上遵循约定。这意味着将集成测试命名为
*IT.java
,而不是其他名称。如果您有一个单一的模块设置,它们属于同一个模块,如果您有多个模块设置,有时为集成测试提供一个单独的模块是有意义的。此外,这意味着集成测试必须由maven-failsafe-plugin执行,maven-failsafe-plugin必须通过如下方式激活:
当然,有必要通过pom文件或公共父文件中的适当pluginManagement部分定义插件版本。
插件管理配置可能如下所示:
通过以下方式组合给予运行单元测试的机会:
如果您还想运行集成测试(包括单元测试):
有时候在发布期间运行集成测试是有意义的而不是,这可以简单地通过使用来实现(有时候人们使用概要文件来做这样的事情):
为了能够运行补充测试(不管我们怎么称呼它们),你可以通过测试套件来完成,这需要JUnit Jupiter中的如下依赖项:
实际上使用了以下依赖项(是的,您需要这两个依赖项):
您可以定义如下所示的测试套件:
通过使用一个特定的软件包,比如你的系统集成测试第一部分等,这些测试将被包括在那里...这里的命名模式是由注解
*.*SD
定义的,或者是你喜欢的任何命名模式(但是要小心不要干扰到surefire/failsafe插件的常用模式)特定套件类可能如下所示:
您可以通过以下命令行激活套件:
这将仅限于那些由
FirstSuite
定义的测试。如果您想将这些套件与您的单元测试组合在一起,您可以简单地通过以下方式进行(注意引用是必要的):您也可以在不同的阶段执行套件(在集成测试时)。这将执行包括套件的单元测试。
如果要将套件与常规集成测试组合在一起:
给定的属性使您有机会控制是否运行单元测试和/或集成测试:
将仅运行集成测试,而不运行单元测试。
将仅运行单元测试,而不运行集成测试。
所有这些都没有任何配置文件,也没有单独的测试源目录等。
v1uwarro2#
我认为@khmarbaise的问题是非常相关的。OP,你应该考虑你的项目结构的复杂性。为什么你有多个测试源根而不仅仅是多个包?你是想把IT和其他测试分开还是什么?
无论如何,您可以使用Build Helper插件的
add-test-source
目标:您还可以使用
add-test-resource
目标来添加资源。更多关于插件的信息:https://www.mojohaus.org/build-helper-maven-plugin/
希望这有帮助!