在闭包中使用static和phpunit会导致:关闭'关闭'不被允许

时间:2016-10-17 12:11:14

标签: php phpunit closures anonymous-function

我正在尝试从闭包中实例化并启动PHPUnitTest,但我不断收到此消息:

mytest :: authenticate_test例外:序列化'关闭'不允许

它在闭包外工作没有任何问题,路由由Aura Router管理。

class mytest extends TestCase {
    public function authenticate_test() {   
    // ...
    }   
}

$runner = 'PHPUnit_TextUI_TestRunner';
$suite = new PHPUnit_Framework_TestSuite('PHPUnit');
$suite->addTest(new mytest("authenticate_test"));

$map->attach('api.v1.', '/api/v1', function ($map)  use($runner, $suite) {
    $map->route('tests', '/tests', function ($request, $response)  
    use($runner, $suite) {      
        $runner::run($suite);  // <-- Error comes here
    });
});

我该如何处理?

请帮我解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

this answer似乎掌握了问题的解决方案。

  

问题来自这样一个事实:PHPUnit将系统中的所有$ GLOBAL序列化为必要的,以便在测试运行时备份它们。然后在测试完成后恢复它们。但是,如果您的GLOBAL空间中有任何闭包,则会导致问题。

尝试通过相应的PHPDoc禁用$GLOBALS的备份:

/**
 * @backupGlobals disabled
 */
class mytest extends TestCase {
    public function authenticate_test() {   
      // ...
    }   
}