我发现讨论你是否测试私人方法的信息.
我已经决定,在某些类中,我想要保护方法,但测试它们.其中一些方法是静态的和简短的.由于大多数公共方法都使用它们,我可能会在以后安全地删除测试.但是对于从TDD方法开始并避免调试,我真的想测试它们.
我想到了以下几点:
哪个是最佳做法?还有别的事吗?
看来,JUnit会自动将受保护的方法更改为公开,但我没有深入了解它.PHP不允许通过反射.
我正在尝试在抽象类中测试私有方法.
我有三个抽象类:
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)