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

时间:2016-06-16 07:52:35

标签: php unit-testing oop

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

此接口应尽可能简单,并且实现的细节应隐藏在私有方法中。

我的问题出现是因为私人方法的不可测试性。

代码应该可以测试吗?我不确定如何将这两种方法整合到一致的开发方法中......

2 个答案:

答案 0 :(得分:1)

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

  • 公开:可由其他类访问
  • 私有:其他类无法访问
  • 受保护:其他类无法访问但可由派生类访问
  

阅读有关面向对象编程的资源,逻辑是尽可能避免使用公共方法。

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

关于测试,私有和受保护的方法可以使用Reflection进行测试。反射使得可以将方法的访问器从私有更改为公共以用于测试目的等等。阅读有关反思here

的更多信息

答案 1 :(得分:1)

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

有些人说,如果你使用TTD,那么所有方法都应该公开,私有方法只能从已经工作和测试的代码中重新计算。

如果必须使用模拟,您也可以测试私有或受保护。