Php 私有与公共方法和可测试代码

Php 私有与公共方法和可测试代码,php,unit-testing,oop,Php,Unit Testing,Oop,阅读有关面向对象编程的资源逻辑是要避免的 尽可能多地使用公共方法。公共方法将提供 接口,其他对象将通过该接口与我们的类交互 这个接口应该尽可能简单,实现的细节应该隐藏在私有方法中 我的问题是因为私有方法的不可测试性 代码应该是可测试的,对吗?我不确定这两种方法是如何集成到一致的开发方法中的 公共、私人和受保护的简要说明: 公共:可供其他类访问 私有:其他类无法访问 受保护的:其他类无法访问,但派生类可以访问 阅读有关面向对象编程的资源逻辑是尽可能避免使用公共方法 这并不完全正确。如果一个方法

阅读有关面向对象编程的资源逻辑是要避免的 尽可能多地使用公共方法。公共方法将提供 接口,其他对象将通过该接口与我们的类交互

这个接口应该尽可能简单,实现的细节应该隐藏在私有方法中

我的问题是因为私有方法的不可测试性


代码应该是可测试的,对吗?我不确定这两种方法是如何集成到一致的开发方法中的

公共、私人和受保护的简要说明:

  • 公共:可供其他类访问
  • 私有:其他类无法访问
  • 受保护的:其他类无法访问,但派生类可以访问
阅读有关面向对象编程的资源逻辑是尽可能避免使用公共方法

这并不完全正确。如果一个方法只在类中使用,并且它不是类公开的接口的一部分,那么该方法当然需要是私有的(如果您打算扩展类,则需要保护该方法)。公共方法是接口的一部分,它们是为其他类调用而设计的方法。您不应该强迫自己限制公共方法的使用。如果一个类需要很多公共方法,那么它应该拥有它们。只要不要把课堂的内在机制暴露给外界,你就会没事的


关于测试,可以使用反射测试私有和受保护的方法。反射可以将方法的访问器从私有更改为公共,以用于测试等目的。阅读有关反射的更多信息

您应该能够通过测试类的公共方法来测试类。如果这还不够覆盖,并且私有或受保护的方法中仍然有很多功能,那么它们可能应该在一个单独的类中

有些人说,如果您使用TTD,那么所有方法都应该启动public,而私有方法只应该从已经工作和测试的代码中重新考虑


如果必须使用mock,您还可以测试private或protected方法。

可能重复我不是测试方面的专家,但我认为您在测试private和/或protected方法时不会遇到问题。我还是很困惑。。。因此,我将我的私有方法转移到另一个类中,该类将它们作为公共的,首先将它们作为私有的含义是什么?@orestiss该类的内部机制可以保持私有。这是使类“工作”但与对象外部无关的逻辑。如果您正在查看一个您认为应该测试的私有方法,那么现在可能是查看类的内聚性、SRP等的时候了&指示是否应该将逻辑扩展到另一个对象中。如果你有时间,看看这本书——它会把你推向正确的方向。不要担心.NET中的代码示例,您仍然会理解这些概念。