Java 在哪里放置测试所需的函数?
我有两个Java类,它们都有黑盒测试用例,只需执行类的公共API。为了编写一些白盒测试用例,我需要编写一些getter,这些getter不是公共API的一部分,但需要对测试类可见Java 在哪里放置测试所需的函数?,java,unit-testing,Java,Unit Testing,我有两个Java类,它们都有黑盒测试用例,只需执行类的公共API。为了编写一些白盒测试用例,我需要编写一些getter,这些getter不是公共API的一部分,但需要对测试类可见 如何处理这些函数?您可以将getters包设为默认值,并将测试类放在同一个包中。对于“包默认值”的回答是一种合理的方法,但我怀疑是否仅出于测试目的向主源添加任何内容。我还质疑是否需要对类进行所谓的“白盒”测试。如果其他对象总是通过其公共API与您的类的对象交互,那么您为什么还要测试除此之外的任何东西呢?我建议您放弃这种
如何处理这些函数?您可以将getters包设为默认值,并将测试类放在同一个包中。对于“包默认值”的回答是一种合理的方法,但我怀疑是否仅出于测试目的向主源添加任何内容。我还质疑是否需要对类进行所谓的“白盒”测试。如果其他对象总是通过其公共API与您的类的对象交互,那么您为什么还要测试除此之外的任何东西呢?我建议您放弃这种方法,坚持只测试您的公共API。我经常将“仅代码”部分公开为
公共静态
方法,以便对代码进行单元测试。这对我很有用。OP:这是Java世界中最常见的解决方案。这听起来很合理。目前,我将测试用例放在一个单独的test.module包树中。显然,测试可能位于不同的位置,因此它们不包含在生产代码中。但是包应该是一样的。我一直认为目录结构必须与包匹配。当我创建投入生产的类列表时,我可以使用sed
从生产代码中删除*Test.class
。它必须与类路径级别的包结构相匹配。您可以访问目录src
和test
,并在它们下面具有相同的正确包结构。将它们编译为类
和测试类
,并将它们都包含在类路径中进行测试。这就是通常的做法。你有任何代码示例吗?有时候你实际上并不需要getter,聪明地使用mock可以得到同样的效果,但更优雅。