任何帮助单元测试的工具?
Any tool to help unit testing?
我正在使用 phpunit。但是你知道它的困难,不可能模拟私有函数,访问私有变量等。有没有可以帮助我的工具?将私有函数转换为 public、将静态方法转换为可模拟等的东西
不是直接回答你的问题,但最好的 "tool" 让 phpunit 更容易的是你的代码的良好设计。如果您不确定针对给定问题的好的设计是什么,那么您已经在使用其他可用的好工具 - 这个站点。
您在问题中提到的造成困难的事情通常很困难,因为您的代码设计存在问题。如果它难以测试,那么重构、使用和维护也将变得困难。这些测试会在编码过程的早期向您展示这一点,并允许您进行更改以使未来的自己免受问题的困扰。
比如你问题中的难点:
Mocking private functions - 这是闻一闻有二
class 需要创建。你的对象可能违反了
单一职责原则。这个功能应该是
移动到它自己的对象中并传递给被测系统。
访问私有变量 - PHPUnit 确实有对象断言
属性(assertAttributeEquals, etc.)。然而这真的
不是你应该需要使用的东西。私有变量是
你的对象的实现细节,应该有某种
public 可用于验证信息是否正确的方法
已设置(getter 或依赖注入模拟对象)
模拟静态方法 - 关于这个有很多问题
困难和许多资源都说静态方法不好
设计。如果你需要模拟一个静态方法,那意味着你是
影响全局状态。静态方法也隐藏依赖
来自您对象的用户并使事情难以修改。您的
设计变得不那么灵活而更加模块化。
哟不需要测试私有方法和属性。它们是私有的是有原因的,并且只有在从包含它们的 class 内部调用时才有意义。此外,如果您测试 public 方法,您也在间接测试它调用的私有方法,并且 public 函数的结果也可能取决于您也在测试的一些私有属性public 方法。
如果您测试 class 的所有 public 方法(即它的接口),我的意思是完全 code/branch 覆盖这些方法,那么您正在测试所有私有methods/attributes 需要。如果在测试完所有 public 之后您还剩下一些未达到的代码片段,那么您可以安全地删除该代码,因为它没有用。
我正在使用 phpunit。但是你知道它的困难,不可能模拟私有函数,访问私有变量等。有没有可以帮助我的工具?将私有函数转换为 public、将静态方法转换为可模拟等的东西
不是直接回答你的问题,但最好的 "tool" 让 phpunit 更容易的是你的代码的良好设计。如果您不确定针对给定问题的好的设计是什么,那么您已经在使用其他可用的好工具 - 这个站点。
您在问题中提到的造成困难的事情通常很困难,因为您的代码设计存在问题。如果它难以测试,那么重构、使用和维护也将变得困难。这些测试会在编码过程的早期向您展示这一点,并允许您进行更改以使未来的自己免受问题的困扰。
比如你问题中的难点:
Mocking private functions - 这是闻一闻有二 class 需要创建。你的对象可能违反了 单一职责原则。这个功能应该是 移动到它自己的对象中并传递给被测系统。
访问私有变量 - PHPUnit 确实有对象断言 属性(assertAttributeEquals, etc.)。然而这真的 不是你应该需要使用的东西。私有变量是 你的对象的实现细节,应该有某种 public 可用于验证信息是否正确的方法 已设置(getter 或依赖注入模拟对象)
模拟静态方法 - 关于这个有很多问题 困难和许多资源都说静态方法不好 设计。如果你需要模拟一个静态方法,那意味着你是 影响全局状态。静态方法也隐藏依赖 来自您对象的用户并使事情难以修改。您的 设计变得不那么灵活而更加模块化。
哟不需要测试私有方法和属性。它们是私有的是有原因的,并且只有在从包含它们的 class 内部调用时才有意义。此外,如果您测试 public 方法,您也在间接测试它调用的私有方法,并且 public 函数的结果也可能取决于您也在测试的一些私有属性public 方法。
如果您测试 class 的所有 public 方法(即它的接口),我的意思是完全 code/branch 覆盖这些方法,那么您正在测试所有私有methods/attributes 需要。如果在测试完所有 public 之后您还剩下一些未达到的代码片段,那么您可以安全地删除该代码,因为它没有用。