Private vs public methods and testable code
阅读有关面向对象编程的资源,逻辑是要避免的
公共方法尽可能多。 公共方法将提供
接口,其他对象将与我们的类交互。
此接口应尽可能简单,并且实现的详细信息应隐藏在私有方法中。
我的问题出现是因为私有方法的不可测试性。
代码应该是可测试的吗? 我不确定如何将这两种方法整合到一致的开发方法中......
您应该能够通过测试其公共方法来测试类。如果这个覆盖范围不够,并且在私有或受保护的方法中仍然有很多功能,那么它们可能应该在一个单独的类中。
有人说如果你使用TTD,那么所有方法都应该公开,并且私有方法只能从已经工作和测试过的代码中重新考虑。
如果必须使用模拟,您还可以测试私有或受保护。
公共,私人和受保护的简要说明:
- 公共:其他类可以访问
- 私人:其他班级无法访问
- protected:其他类不可访问,但派生类可访问
Reading resources about object oriented programming the logic is to avoid public methods as much as possible.
这不完全正确。如果方法仅在您的类中使用,并且它不是您的类公开的接口的一部分,那么当然该方法需要是私有的(或者如果您打算扩展您的类,则受到保护)。公共方法是接口的一部分,它们是旨在由其他类调用的方法。您不应强迫自己限制公共方法的使用。如果一个类需要很多公共方法,那么它应该有它们。只是不要将课堂的内在机制暴露给外界,你会没事的。
关于测试,可以使用Reflection测试私有和受保护的方法。反射使得可以将方法的访问器从私有更改为公共以用于测试目的等等。阅读更多关于反思的内容