Java 测试类扩展依赖模块中的测试类
我在一个模块中有一个测试类,它在它的一个依赖模块中扩展了另一个测试类。如何将依赖项的测试代码导入依赖模块的测试范围 对于文盲来说,我有两个模块,“模块一”是“模块二”的依赖项Java 测试类扩展依赖模块中的测试类,java,maven-2,Java,Maven 2,我在一个模块中有一个测试类,它在它的一个依赖模块中扩展了另一个测试类。如何将依赖项的测试代码导入依赖模块的测试范围 对于文盲来说,我有两个模块,“模块一”是“模块二”的依赖项SubTestCase是TestCase的一个子类 module-one \src\test\java\com\example\TestCase.java module-two \src\test\java\com\example\SubTestCase.java 单元一 \src\t
SubTestCase
是TestCase
的一个子类
module-one
\src\test\java\com\example\TestCase.java
module-two
\src\test\java\com\example\SubTestCase.java
单元一
\src\test\java\com\example\TestCase.java
单元二
\src\test\java\com\example\SubTestCase.java
但是构建失败了,因为“模块一”的测试代码没有导入到“模块二”,而只是主代码 通常,除了常规的modulename.jar文件之外,还可以通过构建和部署modulename-test.jar文件来解决这个问题。您可以像常规工件一样将它们部署到repo。这并不是完全完美的,但是对于代码工件来说,它工作得很好 然后将测试范围的依赖项添加到其他模块的测试jar中 您还可以通过将测试范围内的工件放在其自己的单独模块的“主”范围内,然后将其包含在其他模块的常规测试范围内来解决这个问题。这种解决方案在多模块构建中效果不太好,在多模块构建中,每个模块导出一些测试工件,因为您基本上得到2N个模块
当我们意识到类的数量相当有限,并且存在与这两种解决方案相关的问题时,我们中的许多人实际上放弃了这两种解决方案。我们只是将它们放在“main”范围中一个适当命名的包中。我总是忘记为什么前两个解决方案是一个难题。您可以使用。它将附加到项目中,并与分类器测试一起部署
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven jar插件
包裹
试验罐
然后,其他项目可以通过在依赖项中声明测试分类器来引用测试jar
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>foo</artifactId>
<version>1.0.0</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
name.seller.rich
福
1.0.0
测验
测试
关于富卖家的回答:
测试的使用已过时,请参见
我正在使用maven 2.2.1和maven jar插件2.2,它需要
切换testjar
而不是tests
请注意,jar测试是不可传递的,因此您可能需要显式地添加它们
<project>
...
<dependencies>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>foo</artifactId>
<version>1.0.0</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
</dependencies>
...
</project>
...
name.seller.rich
福
1.0.0
试验罐
测试
...
更新Mike Sokolov的评论:
maven 3用户协会于2014年3月28日更新,请参见上述say的链接
请注意,本指南以前的版本建议使用
测试而不是测试jar。
虽然目前这种方法适用于某些情况,但在测试JAR模块和任何消费者的反应堆构建期间,它不能正常工作
如果调用了安装之前的生命周期阶段。在这种情况下,,
Maven不会从反应堆的输出中解析测试JAR
但从本地/远程存储库生成。显然,这个罐子是从
存储库可能已过时或完全丢失,从而导致
构建失败(参见MNG-2045)
为我工作得很出色,里奇,谢谢你!这应该是公认的答案。krosenvolds的答案是一个公平的讨论,但是没有考虑到maven jar插件特性的这种非常恰当的使用。foo测试的依赖关系是否也包括在内?好的,快速测试说没有。有没有关于如何包含测试源及其依赖项的想法?在gradle,我使用过它,是否也包含了foo测试的依赖项?所有foo的非测试依赖项都将自动包含。如果Foo依赖于bar的测试,那么您需要对Foo/bar应用相同的方法,请参见(Rich的答案),否则Foo将无法通过测试compileNo它的一系列正常依赖项。我只是喜欢这样的想法,例如,在foo中指定在集成测试中使用哪个数据库,并保持bar远离具体的db名称。我相信这个答案是不正确的。测试似乎至少与maven 3.0.3一起工作,所以可能是测试jar解决方案“过时了”?这个答案对我和富商同样有效。Maven 3.3.9。