考虑到以下情况,我想知道对项目/模块组织有什么建议:


我有一个项目DomainObjects,其中有一个类MyObject

/src/test/javaDomainObjects中,我有针对MyObject的测试

我有一个依赖于Client的项目DomainObjects


我想添加一个称为ParameterSupplier类的MyObjectTestSupplier以提供MyObject的测试实例,以供Client中的测试使用。

MyObjectTestSupplier项目中提供DomainObjects似乎是最有意义的。这是我的困境


如果我将供应商放在src/test/javaDomainObjects中,则Client将不可用。
我不想将其放在src/main/javaDomainObjects中,因为这意味着JUnit必须作为DomainObjects的编译依赖项包含在内,并因此包含在我的生产代码中。
如果我将供应商放在某个项目DomainObjectsTest中,我有三种选择

仅将供应商作为测试项目,但这意味着DomainObjects中的测试无法使用该供应商。
DomainObjects的所有测试和供应商放在DomainObjectsTest中,但这意味着即使测试失败,maven也会成功编译DomainObjects
src/test/javaDomainObjectssrc/main/javaDomainObjectsTest复制供应商。



我考虑过尝试将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所述。

07-24 21:05