测试类在依赖模块中扩展测试类

我在一个模块中有一个测试类,它在一个依赖模块中扩展了另一个测试类。 如何将依赖项的测试代码导入依赖模块的测试范围?

为了文盲,我有两个模块,“模块一”是“模块二”的依赖。 SubTestCaseTestCase的子类。

模块一
           \ SRC \测试\ java中\ COM \示例\ TestCase.java
模块二
           \ SRC \测试\ java中\ COM \示例\ SubTestCase.java

但是构建失败了,因为“module-one”的测试代码没有被导入“module-two”,只是主代码。

通常,除了常规modulename.jar文件之外,还可以通过构建和部署modulename-test.jar文件来解决此问题。 您可以像常规工件一样将这些部署到repos。 这并非完全无瑕疵,但对于代码工件来说效果不错。

然后,您将测试范围的依赖项添加到test-jar到其他模块。

您还可以通过将“主”范围中的测试范围工件放在其自己的单独模块中来解决此问题,然后将其包含在其他模块的常规测试范围中。 此解决方案在多模块构建中不能很好地工作,其中每个模块导出一些测试工件,因为您基本上获得2N模块。

当我们意识到类的数量相当有限并且存在与这两种解决方案相关的问题时,我们中的许多人实际上都放弃了这两种解决方案。 我们只是将它们放在“主要”范围内的适当命名的包中。 我只是忘记了为什么这两个第一个解决方案都很痛苦。

您可以使用maven-jar-plugin的test-jar目标将测试代码部署为附加工件。 它将附加到项目并使用分类器测试进行部署。

   org.apache.maven.plugins maven-jar-plugin   package  test-jar     

然后,其他项目可以通过在依赖项中声明测试分类器来引用测试jar。

  name.seller.rich foo 1.0.0 tests test  

关于Rich Seller的答案: tests的使用已经过时了,请参阅用户指南 。

我正在使用maven 2.2.1和maven-jar-plugin 2.2,它需要切换test-jar而不是tests

请注意,测试jar不具有传递性,因此您可能需要显式添加它们。

  ...   name.seller.rich foo 1.0.0 test-jar test   ...  

更新以下Mike Sokolov评论:
2014-03-28更新了maven 3的用户公会,请参阅上面的链接

请注意,本指南的先前版本建议使用 tests 而不是 test-jar 虽然目前适用于某些情况,但在调试JAR模块的反应器构建期间,如果调用安装之前的生命周期阶段,则它在任何使用者中都无法正常工作 。 在这种情况下,Maven不会从reactor构建的输出解析测试JAR,而是从本地/远程存储库解析测试JAR。 显然,来自存储库的JAR可能已过时或完全丢失,导致构建失败(参见MNG-2045)。