我刚刚开始研究一个Java项目(因为我通常使用.net),并且首先让我觉得奇怪的是,在Maven项目中有一个/ src和一个/ test目录显然源代码和测试应该去。
在.net中我更喜欢在单独的程序集/项目中进行测试,例如我会:
这样我就不必在任何测试中膨胀我部署的代码,这样可以更容易地在真正的隔离中测试我的代码,并且在很多情况下我没有费心去编写每个项目的测试,我只需要解决方案单元/集成/验收测试,即MySolution.UnitTests,MySolution.IntegrationTests。
然而在Java中它似乎只是捆绑在一起,我宁愿把它分开,但是当我想对默认结构采取不同的做法时,我听说Maven是一个残酷的情妇。
为了重新回到这篇文章中,我的主要问题是:
答案 0 :(得分:6)
我不必使用任何测试来扩展我部署的代码
可部署工件(jar文件,war文件)不包含测试类或数据。
有没有办法将测试从项目中分离出来
您可以将其拆分为两个项目,其中“测试”项目仅包含测试,并取决于“真实”项目。
但是,特别是对于Maven,您可能希望遵循与其他人(或至少大多数人)相同的项目布局约定。这将使您的生活更轻松(配置更少)。
同样,测试不会使其成为要部署的产品,因此当前的布局应该不是问题。
我只有解决方案广泛的单元/集成/验收测试,即MySolution.UnitTests,MySolution.IntegrationTests。
对于集成测试,这实际上是有道理的。在这种情况下,定义一个“测试”项目,该项目依赖于构成解决方案的所有其他项目(我仍然将单元测试与他们测试的项目保持一致)。
答案 1 :(得分:2)
在默认的maven设置中,测试仅执行,但未部署。
按照惯例,src / main中的所有内容都在目标存档中,而其他所有内容都没有。
默认情况下,maven JAR项目创建一个jar,其中只包含从src / main / java编译的类。您可以使用不同的插件目标来创建:
但所有这些都需要额外的步骤。