PHPUnit 测试的私有函数错误


Private function error with PHPUnit testing

我在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 方法的函数。

此外,如果构造函数也是私有的,则首先需要创建类的实例(例如使用工厂模式),然后调用函数。