all

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

发布于 2022-04-11 13:22:36

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

我想到了以下几点:

  • 建议的方法对象似乎对此有点过分了。
  • 从公共方法开始,当更高级别的测试给出代码覆盖率时,将它们保护起来并删除测试。
  • 继承具有可测试接口的类,使受保护的方法公开

哪个是最佳实践?还有别的事吗?

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

关注者
0
被浏览
41
1 个回答
  • 面试哥
    面试哥 2022-04-11
    为面试而生,有面试问题,就找面试哥。

    如果您将 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万份考试真题开放下载啦

去下载看看