【发布时间】:2011-10-30 23:37:36
【问题描述】:
为已经编写好的代码编写单元测试有时很有趣。
我正在为以下代码编写一个测试用例(示例):
<?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的限制?
【问题讨论】:
-
is_callable() 怎么样?我真的不知道这个函数是否对上下文敏感,据我所知,它没有记录......