相关疑难解决方法(0)

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

我发现讨论你是否测试私人方法的信息.

我已经决定,在某些类中,我想要保护方法,但测试它们.其中一些方法是静态的和简短的.由于大多数公共方法都使用它们,我可能会在以后安全地删除测试.但是对于从TDD方法开始并避免调试,我真的想测试它们.

我想到了以下几点:

  • 答案中建议的方法对象似乎有点矫枉过正.
  • 从公共方法开始,当更高级别的测试给出代码覆盖时,将它们保护并删除测试.
  • 继承具有可测试接口的类,使受保护的方法公开

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

看来,JUnit会自动将受保护的方法更改为公开,但我没有深入了解它.PHP不允许通过反射.

php phpunit unit-testing

275
推荐指数
7
解决办法
11万
查看次数

在抽象类中测试私有方法扩展了另一个

我正在尝试在抽象类中测试私有方法.

我有三个抽象类:

abstract class AbstractClass1 extends AbstractClass2
{
   private function _privateFunction()
    {
        //method's body
    }
}

abstract class AbstractClass2 extends AbstractClass3
{
    public function __construct($param)
    {
        parent::__construct($param)
    }
}

abstract class AbstractClass3
{
    public function __construct($param = array()) 
    {
        //something
    }
}
Run Code Online (Sandbox Code Playgroud)

测试类:

class AbstractClass1Test extends PHPUnit_Framework_TestCase
{
    public function test_privateFunction()
    {
        $stub = $this->getMockForAbstractClass("AbstractClass1");
        $class = new ReflectionClass($stub);
        $method = $class->getMethod("_privateFunction");
        $method->setAccessible(true);

        //some assertings with $method->invoke($stub)
    }
}
Run Code Online (Sandbox Code Playgroud)

测试失败,因为错误:

缺少AbstractClass2 :: __ construct()的参数1,在第190行的/usr/share/php/PHPUnit/Framework/MockObject/Generator.php中调用并定义

AbstractClass2.php

public function __construct($param)
Run Code Online (Sandbox Code Playgroud)

AbstractClass1.php

$classMock …
Run Code Online (Sandbox Code Playgroud)

php phpunit abstract-class unit-testing extending

3
推荐指数
1
解决办法
2155
查看次数

标签 统计

php ×2

phpunit ×2

unit-testing ×2

abstract-class ×1

extending ×1