1

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

但是随后,使用 XDebug 查看我的函数的覆盖率,我发现它减少了,因为它考虑了私有函数。

你怎么看待这件事?谢谢。

4

2 回答 2

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

于 2012-04-13T19:57:51.090 回答
1

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

测试的一个很酷的事情是能够对您的代码进行大量重构,而无需更改测试。你的测试就像一个锚,告诉你什么时候一切都恢复正常了。如果您测试您的私有方法,那么您的测试最终会与您的代码紧密耦合,并且这样的大型重构会很痛苦,因为您必须同时更改测试和代码。

于 2014-09-09T04:13:14.440 回答