1

Java 开发人员总是对在这个类之外不使用的方法使用私有访问级别。这样做有已知的好处,但另一方面我们增加了单元测试的复杂性。在大多数情况下,我们的代码不被任何其他服务/API 使用,我们实际上并不关心“私人”利益。但我相信我们关心的是创建可读的简单单元测试。考虑到这一点,为什么不在默认情况下将类中的所有方法都创建为“包私有”,并且仅在我们真正需要的情况下才将它们设为“私有”?

4

1 回答 1

0

为什么方法的私有访问比包私有更可取?

我不会说它更可取。
这两种做法都是可以接受的,不要让我感到震惊。
现在private应该尽可能地受到青睐,因为它可以防止不希望的耦合,而package-private这会产生更多的耦合,应该与相关性一起使用。

在大多数情况下,我们的代码不被任何其他服务/API 使用,我们实际上并不关心“私人”利益。

即使您开发了一个供某些客户端使用的库,使用包修饰符也不错,因为其中的类package-private并不直接成为 API 的一部分。

但我相信我们关心的是创建可读的简单单元测试。考虑到这一点,为什么不在默认情况下将类中的所有方法都创建为“包私有”,并且仅在我们真正需要的情况下才将它们设为“私有”?

相反,单元测试和private修改器根本不是不兼容的。
我同意使用package-private修饰符而不是private允许轻松测试/模拟/切换类的成员。
在某些情况下,这种做法是可以接受的。
现在概括这首先是一个设计选择。
就我个人而言,我package-private只使用真正相关的修饰符(测试的真正问题或在同一包的其他类之间共享的内部处理),因为除了使单元测试更容易(这是一个好点)之外,我认为这种做法可能倾向于一种比要求更强烈地耦合类的设计。
例如,假设在一个B类中,您可以访问一个字段/方法A类实例,因为它们在同一个包中。
假设从概念上讲,该字段是实现的非常内部部分的一部分,A并且其他类知道它允许以后更改它。
但是由于这个字段/方法是包私有的,现在没有什么能阻止你尽可能地做到这一点。
我不喜欢那样。

最后,我想说你不应该担心private方法的单元测试。
内部不构成 API 的一部分。你不需要测试它。
现在,如果多次调用私有方法或者您确实需要测试此处理,则没有什么可以阻止您将其提取到另一个类中以使其可测试并在需要时有一种方法来模拟处理(以避免多次测试) .

于 2017-12-02T15:54:19.353 回答