在与Java中的源代码相同的包中包含单元测试

Include Unit tests in the same package as the source code in Java

我在Ruby世界中经历了很长一段时间后回到Java中,我对JUnit测试以及我正在测试的源代码有疑问。

如果我的公司有一套图形代码,我们可以将其称为com.example.graphics,我是否应该将测试包含在该软件包中,还是应该将它们包含在单独的软件包中,例如com.example.graphics.test


在同一个java包中没问题。如果您需要访问包私有类,方法或字段,实际上是必需的。但是,源应该在逻辑上分开:

1
2
src/main/com/example/graphics
src/test/com/example/graphics


我个人将所有测试保存在同一个包中,但是在Maven的测试树中(我总是用于Java项目)。考虑将Maven用于您的构建 - 它可以为您节省大量工作。它强制执行与bkail提到的类似的结构,但为您提供的不仅仅是标准化的项目文件夹布局 - 项目生命周期(清理,编译,打包,测试),插件等。


如果您不需要访问私有类,那实际上是一个风味问题。

我有时甚至倾向于创建一个引用产品项目的附加测试项目。
因此,产品和测试明显分开。


将测试放在一个单独的包中确实可以避免在您希望客户端使用的包范围内意外地使用某些方法或类的问题。