Написание модульных тестов для уже написанного кода иногда забавно.
Я пишу контрольный пример для следующего кода (пример):
<?php
class mockPrivate {
public static function one($a){
$var = static::_two($a);
return $var;
}
private static function _two($a){
return $a+1;
}
}
?>
Тестовый класс выглядит так:
<?php
require_once 'mockPvt.php';
class mockPrivate_test extends PHPUnit_Framework_TestCase {
public $classMock;
protected function setUp(){
$this->classMock = $this->getMock('mockPrivate', array('_two'));
}
public function test_one(){
$a = 1;
$retVal = 2;
$classmock = $this->classMock;
$classmock::staticExpects($this->once())
->method('_two')
->with($a)
->will($this->returnValue($retVal));
$value = $classmock::one($a);
$this->assertEquals($value, $retVal);
}
}
?>
После запуска по $ phpunit mockPrivate_test.php
я получил эту ошибку:
PHP Fatal error: Call to private method Mock_mockPrivate_531a1619::_two() from context 'mockPrivate' in /data/www/dev-sumit/tests/example
s/mockPvt.php on line 6
Но если я поменяю
private static function _two()
to
public static function _two() or
protected static function _two()
это работает совершенно нормально. Поскольку это устаревший код, я не могу изменить private to public/protected
. Так есть ли способ проверить функцию один или это ограничение phpunit?