Javaunit testing,目录布局

当为Java代码构build一套unit testing时,是否有一个关于源代码放置testing代码的约定?

例如,如果我有一个包含一堆.java源文件的目录/java ,将testing用例放在/java本身还是使用类似/java/test东西更好。

如果后者是首选的,那么当一个类的private / protected成员不在包之外时,如何testing代码的内部?

即使源代码位于其自己的目录根目录下,也可以将testing放在与原始类相同的包中:

 PROJECT_ROOT +--- src/ +----test/ 

你可以在src下声明一个类com.foo.MyClass ,并且在test下test com.foo.MyClassTest

至于访问私有成员,你可以使用reflection来调用方法(通过Class.getDeclaredMethod.setAccessible来改变它的可访问性),或者你可以使用像testng / junit5这样的东西来对源代码本身进行一些注解驱动的testing个人认为这是一个坏主意)。

为什么不检查java.net上的一些项目来查看他们是如何组织的东西,例如swinglabs (SVN仓库很恐怖 )?

我build议遵循Apache软件基金会的标准目录结构 ,这产生了这样的结果:

 module/ src/ main/ java/ test/ java/ 

这样可以使testing与源代码分离,但是在目录结构中处于同一级别。 如果您阅读了Apache定义其结构的方式,您会发现它也可以帮助划分其他问题,包括资源,configuration文件和其他语言等。

假设您将testing用例放置在与testing相同的包中,此结构还允许unit testingtesting被测单元的包和受保护级别的方法。 关于testing私人方法 – 我不会打扰。 其他的东西,无论是公共的,软件包还是保护的,都会打电话给他们,你应该能够得到全面的testing覆盖testing这些东西。

顺便说一下,上面的链接是Apache的标准构build工具Maven。 每个Java项目都符合这个标准,以及我用Maven构build的每一个项目。

大部分时间都是这样完成的:

 <SOME_DIR>/project/src/com/foo/Application.java <SOME_DIR>/project/test/com/foo/ApplicationTest.java 

所以,你把它们分开,你仍然可以testing包/保护function,因为testing是在同一个包中。

你不能testing私人东西,除非它是在课堂上自我声明的。

交付时,您只需打包由src生成的.class ,而不是testing

实际上,把生产和testing项目分成两个独立的实体是很有意义的,但是在两个项目中都有相同的包装结构。

所以如果我有一个项目“我的项目”,我也创build“我的项目testing”,所以我有以下的目录结构:

 my-project +--- src/com/foo my-project-test +---test/com/foo 

这种方法可以确保testing代码依赖性不会污染生产代码。

我个人认为,应该testing一揽子私人和受保护的方法以及公共方法。 因此,我希望我的testing类与生产类在同一个包中。

这是我们如何build立,我们喜欢它。

 build/ src/ test/build/ test/src/ 

所有testing代码都编译到自己的构build目录中。 这是因为我们不希望产品错误地包含testing类。

在Android Studio中创buildJava库模块时,将在以下位置创build一个默认类:

 [module] + src/main/java/[com/foo/bar] 

如果你查看[module].iml文件,你会发现这个path以及你可以使用的testingpath。 以下是一个总结:

 <module> <component> <content> <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> </content> </component> </module> 

你可以做什么特别是创build一个testing目录有以下结构:

 [module] + src/main/java/[com/foo/bar] + src/test/java/[com/foo/bar] 

上述结构将被Android Studio识别,您的文件将包含在模块中。

我假设这个结构是代码和testing的推荐布局。