PHP

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

发布于 2021-02-02 11:51:52

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

我想到了以下几点:

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

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

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

关注者
0
被浏览
101
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    如果您将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(...));
      ...
    }
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看