阅读有关面向对象编程的资源,逻辑是要避免的
公共方法尽可能多。 公共方法将提供
接口,其他对象将与我们的类交互。
此接口应尽可能简单,并且实现的详细信息应隐藏在私有方法中。
我的问题出现是因为私有方法的不可测试性。
代码应该是可测试的吗? 我不确定如何将这两种方法整合到一致的开发方法中......
PHP的可能重复:公共,私有,受保护
我不是测试的大专家,但我认为你不会有测试私有和/或受保护方法的问题。stackoverflow.com/questions/249664/
您应该能够通过测试其公共方法来测试类。如果这个覆盖范围不够,并且在私有或受保护的方法中仍然有很多功能,那么它们可能应该在一个单独的类中。
有人说如果你使用TTD,那么所有方法都应该公开,并且私有方法只能从已经工作和测试过的代码中重新考虑。
如果必须使用模拟,您还可以测试私有或受保护。
它仍然让我感到困惑......所以我将我的私人方法转移到另一个将它们公之于众的类中,首先将它们作为私有的含义是什么?
@orestiss班级的内在机制可以保持私密。 这是使您的类"工作"但与对象外部无关的逻辑。 如果您正在查看您认为应该测试的私有方法,那么可能需要时间来查看类的内聚,SRP等,并指示逻辑是否应该被扩展到另一个对象中。 如果你有时间,请看看这本书artofunittesting.com - 它应该会推动你朝着正确的方向前进。 不要担心.NET中的代码示例,您仍然可以理解这些概念。
公共,私人和受保护的简要说明:
公共:其他类可以访问
私人:其他班级无法访问
protected:其他类不可访问,但派生类可访问
Reading resources about object oriented programming the logic is to avoid public methods as much as possible.
这不完全正确。如果方法仅在您的类中使用,并且它不是您的类公开的接口的一部分,那么当然该方法需要是私有的(或者如果您打算扩展您的类,则受到保护)。公共方法是接口的一部分,它们是旨在由其他类调用的方法。您不应强迫自己限制公共方法的使用。如果一个类需要很多公共方法,那么它应该有它们。只是不要将课堂的内在机制暴露给外界,你会没事的。
关于测试,可以使用Reflection测试私有和受保护的方法。反射使得可以将方法的访问器从私有更改为公共以用于测试目的等等。阅读更多关于反思的内容