我試圖測試抽象類中的私有方法。測試抽象類中的私有方法擴展了另一個
我有三個抽象類:
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
}
}
測試類:
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)
}
}
測試失敗,因爲錯誤的,:
Missing argument 1 for AbstractClass2::__construct(), called in /usr/share/php/PHPUnit/Framework/MockObject/Generator.php on line 190 and defined
AbstractClass2.php
public function __construct($param)
AbstractClass1.php
$classMock = $this->getMockForAbstractClass("AbstractClass1");
Generator.php:190
if ($callOriginalConstructor &&
!interface_exists($originalClassName, $callAutoload)) {
if (count($arguments) == 0) {
<strong>$mockObject = new $mock['mockClassName'];</strong>
} else {
$mockClass = new ReflectionClass($mock['mockClassName']);
$mockObject = $mockClass->newInstanceArgs($arguments);
}
} else ...
什麼我錯了嗎?或者我該如何在這種情況下測試我的私人功能?
你在哪裏傳遞參數給構造函數? –
[PhpUnit私有方法測試]的可能重複(http://stackoverflow.com/questions/5937845/phpunit-private-method-testing) – Gordon
[塞巴斯蒂安伯格曼的博客:測試你的私人](http:// sebastian-bergmann。 de/archives/881-Testing-Your-Privates.html) – Gordon