考虑到以下情况,我想知道对项目/模块组织有什么建议:
我有一个项目DomainObjects
,其中有一个类MyObject
在/src/test/java
的DomainObjects
中,我有针对MyObject
的测试
我有一个依赖于Client
的项目DomainObjects
我想添加一个称为ParameterSupplier
类的MyObjectTestSupplier
以提供MyObject
的测试实例,以供Client
中的测试使用。
在MyObjectTestSupplier
项目中提供DomainObjects
似乎是最有意义的。这是我的困境
如果我将供应商放在src/test/java
的DomainObjects
中,则Client
将不可用。
我不想将其放在src/main/java
的DomainObjects
中,因为这意味着JUnit必须作为DomainObjects
的编译依赖项包含在内,并因此包含在我的生产代码中。
如果我将供应商放在某个项目DomainObjectsTest
中,我有三种选择
仅将供应商作为测试项目,但这意味着DomainObjects
中的测试无法使用该供应商。
将DomainObjects
的所有测试和供应商放在DomainObjectsTest
中,但这意味着即使测试失败,maven也会成功编译DomainObjects
用src/test/java
的DomainObjects
和src/main/java
的DomainObjectsTest
复制供应商。
我考虑过尝试将DomainObjectsTest
做成DomainObjects
的模块,但是只有在DomainObjects
的包装是pom
的情况下才起作用,这在这里不起作用。
有什么想法吗?有什么建议吗?
编辑:作为一种解释,MyObject
是一个简单的bean(只是getter和setters),我使用ParameterSuppier
模式来提供bean的填充实例。供应商提供了实用方法,可轻松创建用于测试的Bean填充实例。我这样做是为了在我的整个项目中都不会重复此人口代码(或嘲笑的对等物)。
最佳答案
正如the official Maven mini guide on this particular topic所说,您应该将DomainObjects
项目的测试工件发布到本地Maven存储库(或您希望或能够在任何地方)中,并将DomainObjects-X.Y-tests
工件用作项目。
使用the jar:test-jar goal of the Maven JAR plugin完成发布测试工件。
如果在Client
项目中将此工件作为测试范围的依赖项包括在内,则依赖Client
项目的任何其他项目都不会继承Client
项目的测试工件,因为测试范围的依赖项不会传递默认为the official guide on Maven's dependency mechanism所述。