我认为永远不应该测试私有函数,而应该只测试公共接口。
但是随后,使用 XDebug 查看我的函数的覆盖率,我发现它减少了,因为它考虑了私有函数。
你怎么看待这件事?谢谢。
我认为永远不应该测试私有函数,而应该只测试公共接口。
但是随后,使用 XDebug 查看我的函数的覆盖率,我发现它减少了,因为它考虑了私有函数。
你怎么看待这件事?谢谢。
我相信你应该测试你所有的方法,包括私有的和受保护的。尽管它们对其他类可见,但它们内部有需要测试的逻辑。为了测试受保护的方法,您通常需要创建一个使方法公开的代理类。
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
您应该确保您的私有/受保护方法作为测试的一部分运行,但不要直接测试它们。如果存在私有方法,则必须在某处由公共方法调用。因此,以依次调用私有方法的方式调用该公共方法。
测试的一个很酷的事情是能够对您的代码进行大量重构,而无需更改测试。你的测试就像一个锚,告诉你什么时候一切都恢复正常了。如果您测试您的私有方法,那么您的测试最终会与您的代码紧密耦合,并且这样的大型重构会很痛苦,因为您必须同时更改测试和代码。