-1

我们应该在多大程度上封装我们的方法和类?例如,除了 getter 和 setter,还有哪些非静态方法应该声明为 public?

如果我们声明了太多私有方法,我们如何为它们进行单元测试呢?

我听说过一句话“如果你的私有方法太复杂以至于需要单独的单元测试,这通常意味着它应该有自己的类”,那么我们如何确定一个方法是否足够复杂以进行单独的单元测试呢?(例如,对于像 getter/setter 这样的方法,我们不需要正确测试它们)

4

3 回答 3

1

我们应该声明我们希望在类的包之外可以访问的公共方法,换句话说,包含类的公共 API 的方法

于 2013-06-12T06:55:57.640 回答
1

如果您无法更改可见性,则可以使用反射来测试私有方法:

Method method = targetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);

如果您可以更改可见性,则可以使这些方法受到保护并创建子类(仅在 JUnit 中使用的存根)以测试方法。另一种策略是通过测试公共方法来测试私有方法。有时很难实现,因为您必须创建许多模拟连接问题、数据库问题等的 Stub 类。

关于可见性,Oracle 文档说:

Use the most restrictive access level that makes sense for a particular member. Use private unless you have a good reason not to.
于 2013-06-12T07:01:23.670 回答
0

如果您不想对类和方法进行版本控制,请封装它们。如果您想保留一些永远不会更改的核心部分,则将其封装并通过对象或获取设置方法访问它们。您需要聪明地排列界限,太多的公共事物会在代码中造成漏洞。所以要小心,因为安全是为了保护。

于 2013-06-12T06:59:18.860 回答