Phpunit 有什么工具可以帮助单元测试吗?

Phpunit 有什么工具可以帮助单元测试吗?,phpunit,Phpunit,我正在使用phpunit。但是你知道它的困难,不可能模拟私有函数,访问私有变量,等等。有没有一个工具可以帮助我?将私有函数转换为公共函数,将静态方法转换为可模仿方法,等等,这些都不能直接回答您的问题,但使phpunit更容易的最佳“工具”是良好的代码设计。如果你不确定一个给定问题的好设计是什么,那么你已经在使用另一个可用的好工具——这个网站 您在问题中提到的导致困难的事情通常是困难的,因为代码的设计存在问题。如果很难测试,那么重构、使用和维护就很难了。测试在编码过程的早期向您展示了这一点,并允许

我正在使用phpunit。但是你知道它的困难,不可能模拟私有函数,访问私有变量,等等。有没有一个工具可以帮助我?将私有函数转换为公共函数,将静态方法转换为可模仿方法,等等,这些都不能直接回答您的问题,但使phpunit更容易的最佳“工具”是良好的代码设计。如果你不确定一个给定问题的好设计是什么,那么你已经在使用另一个可用的好工具——这个网站

您在问题中提到的导致困难的事情通常是困难的,因为代码的设计存在问题。如果很难测试,那么重构、使用和维护就很难了。测试在编码过程的早期向您展示了这一点,并允许您进行更改以避免将来出现问题

例如,在您的问题中遇到的困难:

  • 模仿私有函数-这是一种有第二种味道的气味 需要创建的类。您的对象可能违反了 单一责任原则。这个函数应该是 移动到它自己的对象中并传递到被测系统中

  • 访问私有变量-PHPUnit确实有对象的断言 属性()。然而这真的 不是你应该使用的东西。私有变量是 一个对象的实现细节,应该有一些 可用于验证正确信息的公共方法 已设置(getter或依赖项注入的模拟对象)

  • 模仿静态方法——这方面有很多问题 困难和许多资源说明静态方法如何不好 设计如果需要模拟静态方法,这意味着 影响全球国家。静态方法也隐藏依赖项 来自对象的用户,并使事情难以修改。你的 设计变得不那么灵活,更加模块化


Yo不需要测试私有方法和属性。它们是私有的是有原因的,并且只有在从持有它们的类内部调用时才有意义。此外,如果您测试一个公共方法,那么您也在间接测试它调用的私有方法,并且公共函数的结果也可能取决于一些私有属性,您也在使用公共方法测试这些属性


如果您测试一个类的所有公共方法(即它的接口),我指的是这些方法的完整代码/分支覆盖率,那么您正在测试所有需要的私有方法/属性。如果在测试了所有公共内容之后,您留下了一些未到达的代码,那么您可以安全地删除这些代码,因为它们没有任何用处。

需要访问类的私有函数和方法,这表明您做错了(测试或被测类或两者都有)。测试类的接口(即公共方法)。你不能在意它完成工作的内在方式。