我在PHPunit测试中收到以下错误
Warning: Invalid callback Vc_Manager::__sleep, cannot access private method Vc_Manager::__sleep()
这是因为函数 __sleep() 是私有的,并且类的 __contruct() 函数也是私有的。
如何在不公开函数的情况下在 phpunit 测试中使用此函数?
完整代码:
require_once('../splitTestNew.php');
class SplitTestTest extends PHPUnit_Framework_TestCase
{
public function setUp(){
}
public function tearDown(){ }
/**
* @runInSeparateProcess
*/
public function testDefaultParameterValues()
{
$obj = new BSSplitTest();
$this->assertTrue($obj->params['A'] == 50);
$this->assertTrue($obj->params['B'] == 50);
$this->assertTrue($obj->params['SplitCookieA'] == 'ACounter');
$this->assertTrue($obj->params['SplitCookieB'] == 'BCounter');
$this->assertTrue($obj->params['TableA'] == 'counter_a');
$this->assertTrue($obj->params['TableB'] == 'counter_b');
}
如果你的构造函数是私有的,那么你不能有
$obj = new BSSplitTest();
这意味着您的构造函数是公共的,您需要一个静态工厂构造函数。
$obj = BSSplitTest::getInstance(); //or createInstance if not singleton
我们从不测试私有方法,这没有任何意义。您需要将函数设为公共函数,或者测试使用 private 方法的函数。
此外,如果构造函数也是私有的,则首先需要创建类的实例(例如使用工厂模式),然后调用函数。