38

您认为在项目中组织 JUnit 测试的最佳实践是什么,为什么?例如,您是否将测试放在他们测试的课程旁边?您是否将它们放在一个单独但并行的包结构中?您是否完全使用不同的组织策略?

4

5 回答 5

38

我使用单独但并行的包结构有几个原因。

  1. 它使测试以与应用程序代码相同的方式组织。
  2. 我可以轻松地仅构建应用程序文件以进行分发。
  3. 测试代码仍然可以访问我的应用程序代码。
  4. 它不像将测试代码与应用程序代码混合那样混乱。
于 2008-10-08T17:03:41.067 回答
8

我将我的测试放在一个单独但相似/并行的包结构中。这就是 Maven 喜欢的方式,它也适用于 IDE。我喜欢这种方式,因为我没有将我的测试代码与我的应用程序代码混在一起,但我仍然可以访问包私有的东西以进行模拟和状态验证。

于 2008-10-08T17:01:04.957 回答
5

只需使用Maven。使用 maven,您可以为项目创建默认结构:

mvn archetype:create -DgroupId=com.yoyodyne -DartifactId=UberApp

这将创建Maven 的标准目录布局,其中包含单元测试和主项目的空间。使用 maven,您可以在不将其打包到 jar 的情况下运行单元测试,并且您可以构建一个仅包含您的应用程序的 jar。对于运行、测试和编译时间,您还可以有不同的类路径和不同的依赖项。

看到这里很少有人真正使用 Maven(或者至少是 Ant,尽管我更喜欢 Maven 来处理依赖项),我觉得最令人不安。

于 2008-10-08T18:09:07.673 回答
3

我尊重 Maven 项目结构,即使我不在项目中使用 maven,只是因为我习惯了它。最佳做法是使用单独的源文件夹,它遵循与主源文件夹相同的包结构。

您的测试特定源(您编写的仅用于测试的实用程序)应该放在那里,如果您打算将它们与应用程序运行时代码一起使用,则将其移动到主源文件夹中。这个想法是很好地解耦,就像你通过分离持久性和控制来分解效率一样。

于 2010-12-23T14:53:20.047 回答
1

正如蜥蜴比尔所说,

它有助于拥有一个并行结构,以便 1)我可以发布 src.zip 或 src.tar.gz 并省略单元测试 2)在版本控制系统级别,您可以挂钩谁更改源代码以及谁仅更改单元测试

“缺点”
如果源测试和单元测试都在同一个包中,则无法密封 JAR 文件(意思是,在准备 .JAR 并密封之前,您需要删除单元测试)

于 2008-10-08T17:24:55.877 回答