您认为在项目中组织 JUnit 测试的最佳实践是什么,为什么?例如,您是否将测试放在他们测试的课程旁边?您是否将它们放在一个单独但并行的包结构中?您是否完全使用不同的组织策略?
5 回答
我使用单独但并行的包结构有几个原因。
- 它使测试以与应用程序代码相同的方式组织。
- 我可以轻松地仅构建应用程序文件以进行分发。
- 测试代码仍然可以访问我的应用程序代码。
- 它不像将测试代码与应用程序代码混合那样混乱。
我将我的测试放在一个单独但相似/并行的包结构中。这就是 Maven 喜欢的方式,它也适用于 IDE。我喜欢这种方式,因为我没有将我的测试代码与我的应用程序代码混在一起,但我仍然可以访问包私有的东西以进行模拟和状态验证。
只需使用Maven。使用 maven,您可以为项目创建默认结构:
mvn archetype:create -DgroupId=com.yoyodyne -DartifactId=UberApp
这将创建Maven 的标准目录布局,其中包含单元测试和主项目的空间。使用 maven,您可以在不将其打包到 jar 的情况下运行单元测试,并且您可以构建一个仅包含您的应用程序的 jar。对于运行、测试和编译时间,您还可以有不同的类路径和不同的依赖项。
看到这里很少有人真正使用 Maven(或者至少是 Ant,尽管我更喜欢 Maven 来处理依赖项),我觉得最令人不安。
我尊重 Maven 项目结构,即使我不在项目中使用 maven,只是因为我习惯了它。最佳做法是使用单独的源文件夹,它遵循与主源文件夹相同的包结构。
您的测试特定源(您编写的仅用于测试的实用程序)应该放在那里,如果您打算将它们与应用程序运行时代码一起使用,则将其移动到主源文件夹中。这个想法是很好地解耦,就像你通过分离持久性和控制来分解效率一样。
正如蜥蜴比尔所说,
它有助于拥有一个并行结构,以便 1)我可以发布 src.zip 或 src.tar.gz 并省略单元测试 2)在版本控制系统级别,您可以挂钩谁更改源代码以及谁仅更改单元测试
“缺点”
如果源测试和单元测试都在同一个包中,则无法密封 JAR 文件(意思是,在准备 .JAR 并密封之前,您需要删除单元测试)