Java单元测试,目录布局

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (107)

当为Java代码构建一套单元测试时,是否存在与源代码相关的测试代码放置位置的约定?

例如,如果我有一个/java包含一堆.java源文件的目录,最好是将测试用例/java本身或使用类似的东西/java/test

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

提问于
用户回答回答于

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

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

你可以com.foo.MyClasssrccom.foo.MyClassTest下声明一个类并在其下进行测试test

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

为什么不检查一些项目java.net以了解他们如何组织事物,例如swinglabs(SVN仓库恐怕很慢)?

用户回答回答于

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

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

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

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

顺便说一句,上面的链接是Apache的标准构建工具Maven。每个Java项目都符合此标准,以及我遇到的每个使用Maven构建的项目。

扫码关注云+社区