如何配置POM文件以运行打包在JAR文件中的测试?

21

我有一个Maven构建过程,可以将可执行的JAR文件及其测试发布到Nexus。 我还有另一个Maven构建过程需要访问这些JAR文件(可执行文件+测试),并运行测试。

我该怎么做?到目前为止,我只能在JAR文件被拆分成类文件的情况下完成此操作。 我是Maven新手,并且对文档完全感到迷惑。


为什么你要将构建和测试这两个过程分离呢? - Eugen Martynov
你能修改这两个项目的pom.xml文件吗? - noahlz
另外,您能详细说明一下您目前为止尝试过的内容吗?您提到已经“将jar文件解压成类文件”,这是手动完成的还是使用了Maven依赖插件? - noahlz
@noahz,是的,我是。我正在尝试遵循这个链接:http://maven.apache.org/guides/mini/guide-attached-tests.html,但我不确定这是否是正确的方向。 - Vitaliy
正如Eugen所提到的,附加测试JAR包是标准的,但在不同的项目中执行它们则不是。 - noahlz
3个回答

13

更新于2022-03-11

该功能已实现,详见https://dev59.com/6Gkv5IYBdhLWcg3wlRtc#17061755

原始回答

Surefire和failsafe目前不支持从jar包中运行测试。

这主要是由于无法识别测试的情况。

有两种方法可以使测试运行:

  1. 使用测试套件列出测试-jar中的所有测试。因为测试套件将位于src/test/java中(更准确地说,会编译进入target/test-classes),所以Surefire/failsafe会自动检测到它,并且将运行测试套件中的所有测试(假设套件类名与includes规则相匹配:以Test开头或结尾)

  2. 使用Maven依赖插件的unpack-dependencies目标将测试-jar解压缩到target/test-classes中(这听起来很hack,但效果很好)

第一种选择的主要问题是您不能轻松地仅运行测试套件中的一个测试,并且需要命名测试-jar中的每个测试。

因此,我倾向于选择选项2... 另外一个好处是选项2不意味着编写代码以解决构建工具插件中的限制... 在我看来,您越少将自己锁定在特定的构建工具中,就越好。


1
太糟糕了。虽然这似乎不是一个过分苛刻的要求。 我会采取第二个选项。谢谢。 - Vitaliy
1
啊嗯...我是Maven PMC的成员之一...它在我的待办清单上,因为这也是Kristian的待办清单上的事项...问题更多的是它不是一个紧急情况,我们都没有感到迫切需要解决这个问题而不是其他问题。如果你想准备一个补丁,我会非常乐意审查该补丁并考虑提交它。参见:http://javaadventure.blogspot.ie/2012/07/do-you-want-to-become-maven-committer.html 了解补丁应该像什么。 - Stephen Connolly
哦!请原谅我的无知。 什么是PMC?(我知道PM..) - Vitaliy
很多时候,您可能希望在另一个项目中重用为某个项目创建的测试类,您可能有一些抽象类或助手类需要重用...并且当我们着手实现您正在寻找的功能时,这将会有所帮助。 - Stephen Connolly
Maven PMC是Maven项目管理委员会,由Apache软件基金会委托管理Maven项目的人员组成。我们还有其他的职责,比如投票决定发布等等。所有PMC成员都是Maven的开发人员,但并非所有Maven的开发人员都是PMC成员。有些人希望专注于Maven的开发,可能不想被PMC职责所干扰,因此PMC不会指示做什么或计划方案。换言之,我们不会强制规定要做什么,但我们知道开发人员想做什么。;-) - Stephen Connolly
显示剩余2条评论

7

1
附加的测试jar可以作为其他项目中通常依赖项使用,支持在测试区域重用代码,但您无法从jar文件中运行测试。如果您确实需要解决方案,则必须编写至少一个套件(等等?)以从jar文件启动测试。

你的意思是编写一个测试,使用JUnitRunner程序化地执行特定jar中的测试吗? - Vitaliy
例如,您需要引导JAR中的测试。通常的测试(src/test/java)将由Surefire启动... - khmarbaise

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接