当前位置: 首页 > 面试题库 >

使用PHPUnit测试受保护方法的最佳实践

巢宏富
2023-03-14
问题内容

我已经决定,在某些类中,我想拥有受保护的方法,但要对其进行测试。这些方法中的一些是静态的且简短的。因为大多数公共方法都使用了它们,所以以后我可能可以安全地删除测试。但是,为了从TDD方法入手并避免调试,我真的想对其进行测试。

我想到了以下几点:

*建议的“ 方法对象”似乎对此过于矫kill过正。
* 从公共方法开始,当更高级别的测试提供了代码覆盖范围时,请将其置于保护状态并删除测试。
* 继承具有可测试接口的类,使受保护的方法公开

哪个是最佳做法?还有别的事吗?

看起来,JUnit会自动将受保护的方法更改为公共方法,但是我对此没有更深入的了解。PHP不允许通过反射进行此操作。


问题答案:

如果您将PHP5(> = 5.3.2)与PHPUnit一起使用,则可以在运行测试之前通过使用反射将其设置为公共来测试私有和受保护的方法:

protected static function getMethod($name) {
  $class = new ReflectionClass('MyClass');
  $method = $class->getMethod($name);
  $method->setAccessible(true);
  return $method;
}

public function testFoo() {
  $foo = self::getMethod('foo');
  $obj = new MyClass();
  $foo->invokeArgs($obj, array(...));
  ...
}


 类似资料:
  • 问题内容: 试图使用EasyMock来测试是否调用了一个受保护的方法,不知道这是否是最好的方法……但是鉴于以下内容,我如何才能知道在调用callMe()时didIgetCalled()实际上是被调用了? 问题答案: 这是一种无需使用EasyMock即可测试该方法的方法,但是我的建议是:如果它不是公开的,请不要为此编写测试 我知道这不会完全解决您的问题,但这只是一个开始 :)

  • 我想知道在protectedData不可用的情况下推迟应用程序启动是否可以... 我的意思是

  • 问题内容: 如何在受保护的python类中定义一个方法,只有子类才能看到它? 这是我的代码: 我只希望看到的方法的子类。 问题答案: Python不像C ++ / Java / C#支持访问保护。一切都是公开的。座右铭是:“我们都是成年人。” 记录下您的课程,并坚持要求您的合作者阅读并遵守文档。 Python的文化是,以下划线开头的名称意味着:“除非您真正知道应该使用这些名称,否则请不要使用它们。

  • 问题内容: 关键字授予对相同包和子类(http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html)中的类的访问权限。 现在,每个类都有一个超类(http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html)。 因此,我得出结论,即使每个类都可以访问的方法。

  • 问题内容: 我正在建立一个Drupal网站,其中包含许多将使用jQuery / ajax发布的用户特定信息。它自身的信息不是很敏感,仅重要的是验证表单数据是否已被诸如Firebug之类的工具篡改,并确保确实已从指定用户请求该信息。换句话说,我正在尝试找出用ajax发布时保护数据完整性和真实性的最佳方法。 理想情况下,我想使用一些众所周知的消息身份验证系统,例如HMAC算法。但是,由于它包含对称密钥

  • 这是一个有点宽泛的问题。我正在构建一个带有node和express的stripe服务器,并使用react前端对其进行攻击。我已经把基本的api,在那里我可以创建客户,保存支付方法和访问帐户编辑,更新等。 通过Stripe自己推荐的包收集支付方式的详细信息,该包保护PPI以使其符合政府关于隐私的规定。 现在我正在尝试保护rest api,以便只有经过验证的个人才能访问apiendpoint。例如,我