Java 单元测试,目录布局 [已关闭]
在为 Java 代码构建一套单元测试时,是否有关于将测试代码放置在何处与源代码相关的约定?
例如,如果我有一个包含一堆源文件的目录,那么最好将测试用例放在自己中还是使用类似./java
.java
/java
/java/test
如果后者是首选,当类的 / 成员在包外部不可用时,如何测试代码的内部?private
protected
在为 Java 代码构建一套单元测试时,是否有关于将测试代码放置在何处与源代码相关的约定?
例如,如果我有一个包含一堆源文件的目录,那么最好将测试用例放在自己中还是使用类似./java
.java
/java
/java/test
如果后者是首选,当类的 / 成员在包外部不可用时,如何测试代码的内部?private
protected
我建议遵循Apache软件基金会的标准目录结构,它产生了这个结果:
module/
src/
main/
java/
test/
java/
这使测试与源代码分开,但在目录结构中处于同一级别。如果你通读Apache如何定义它们的结构,你会发现它也有助于划分其他问题,包括资源、配置文件、其他语言等。
此结构还允许单元测试来测试所测试单元的包和受保护级别方法,前提是您将测试用例放在与测试的包相同的包中。关于测试私人方法 - 我不会打扰。其他的东西,无论是公共的,包的,还是受保护的调用它们,你应该能够获得完整的测试覆盖率来测试这些东西。
顺便说一句,上面的链接是Apache的标准构建工具Maven。他们拥有的每个Java项目都符合这个标准,以及我遇到的每个使用Maven构建的项目。
您可以将测试放在与原始类相同的包中,即使源代码位于其自己的目录根目录下也是如此:
PROJECT_ROOT
+--- src/
+----test/
可以将类声明为 under,并将其测试声明为 。com.foo.MyClass
src
com.foo.MyClassTest
test
至于对私有成员的访问,你可以使用反射来调用方法(通过改变它们的可访问性),或者你可以使用像testng/junit5这样的东西在源代码本身上放置一些注释驱动的测试(我个人认为这是一个坏主意)。Class.getDeclaredMethod.setAccessible
为什么不看看一些项目,看看他们是如何组织事情的,例如swinglabs(恐怕SVN存储库很慢)?java.net