在为Java代码构建一套单元测试时,是否有关于将测试代码放在与源代码相关的位置的约定?
例如,如果我有一个包含一堆.java
源文件的目录/java
,那么将测试用例放在/java
本身中还是使用/java/test
之类的内容更好?
如果选择后者,那么当类的private
/protected
成员在包之外不可用时,如何测试代码的内部结构?
发布于 2009-10-08 20:50:16
我建议遵循Apache Software Foundation's standard directory structure,它会产生以下结果:
module/
src/
main/
java/
test/
java/
这使测试与源代码分离,但在目录结构中处于同一级别。如果你通读Apache是如何定义它们的结构的,你会发现它也有助于划分其他的关注点,包括资源,配置文件,其他语言等。
此结构还允许单元测试测试被测单元的包和受保护级别的方法,假设您将测试用例放在与它们测试的包相同的包中。关于测试私有方法--我不会费心的。其他的东西,无论是公共的,包的,还是受保护的,都会调用它们,你应该能够获得完整的测试覆盖范围来测试这些东西。
顺便说一下,上面的链接指向Apache的标准构建工具Maven。他们的每个Java项目都符合这个标准,我遇到的每个用Maven构建的项目也是如此。
发布于 2009-10-08 20:49:46
大多数时候是这样做的:
<SOME_DIR>/project/src/com/foo/Application.java
<SOME_DIR>/project/test/com/foo/ApplicationTest.java
因此,您可以将它们分开,并且仍然可以测试包/受保护的功能,因为测试在同一个包中。
你不能测试私有的东西,除非它自己在类中声明。
在交付时,您只需打包由src生成的.class
,而不是测试。
发布于 2009-10-09 15:41:45
实际上,将你的生产和测试项目分成两个独立的实体是很有意义的,但在两个项目中具有相同的包结构。
因此,如果我有一个项目'my- project‘,我还创建了'my-project-test',所以我有以下目录结构:
my-project
+--- src/com/foo
my-project-test
+---test/com/foo
此方法可确保测试代码依赖项不会污染生产代码。
在我个人看来,包的私有和受保护的方法应该像公共方法一样进行测试。因此,我希望我的测试类与生产类位于同一个包中。
https://stackoverflow.com/questions/1540324
复制相似问题