我们需要在CakePHP上测试私有函数吗?

时间:2012-04-13 16:33:14

标签: cakephp testing code-coverage cakephp-2.0 xdebug

我认为永远不应该测试私有函数,只应该使用公共接口。

然后,使用XDebug查看我的函数的覆盖范围,我发现它在考虑私有函数时会减少。

你怎么看? 感谢。

2 个答案:

答案 0 :(得分:4)

我相信你应该测试你的所有方法,包括私人和受保护的方法。尽管它们对其他类的可见性,但它们中的逻辑需要进行测试。为了测试受保护的方法,您通常需要创建一个使方法公开的代理类。

class MyClass {

   protected function protected_method() {
     // do stuff
   }

}

在测试用例中,您将创建另一个类并将其受保护的方法设为公共,如此

class TestMyClass extends MyClass {

   public function protected_method() {
     return parent::protected_method();
   }

}

现在,您可以在测试用例中测试TestMyClass::protected_method()

这不是唯一的方法。 PHPUnit的创建者Sebastian Bergmann在这里写了一篇关于它的博客文章:http://sebastian-bergmann.de/archives/881-Testing-Your-Privates.html

答案 1 :(得分:1)

您应该确保您的私有/受保护方法作为测试的一部分运行,但不要直接测试它们。如果存在私有方法,则必须通过某个公共方法调用它。因此,以一种反过来调用私有方法的方式调用该公共方法。

测试的一个很酷的事情是能够对代码进行大量的重新考虑,而无需更改测试。你的测试作为一个锚点告诉你什么时候它再次工作。如果你测试你的私有方法,那么你的测试最终会变得与你的代码紧密耦合,并且它会使大型重构成为一种痛苦,因为你必须同时更改测试和代码。