PHPUnit对象已克隆

PHPUnit对象已克隆,phpunit,php-7.1,Phpunit,Php 7.1,我们正在对我们的应用程序进行phpunizing,考虑两个范围:减少版本中的回归和bug。 该应用程序采用MVC模式,但没有开源框架:我们实际上使用的是一个专有框架,其中有许多来自symfony的组件(目标是将来某个时候将所有组件移植到symfony) 应用程序存在一些设计缺陷,因此不适合进行单元测试。不管怎样,我们已经有了一个起点,这里出现了一些我无法解决的strage行为 我们所有的业务方法都依赖于在创建时通过依赖项注入传递的路由器对象。 路由器公开了一些获取和设置变量的方法,如_SERVE

我们正在对我们的应用程序进行phpunizing,考虑两个范围:减少版本中的回归和bug。 该应用程序采用MVC模式,但没有开源框架:我们实际上使用的是一个专有框架,其中有许多来自symfony的组件(目标是将来某个时候将所有组件移植到symfony)

应用程序存在一些设计缺陷,因此不适合进行单元测试。不管怎样,我们已经有了一个起点,这里出现了一些我无法解决的strage行为

我们所有的业务方法都依赖于在创建时通过依赖项注入传递的路由器对象。 路由器公开了一些获取和设置变量的方法,如_SERVER、_get、_POST,这些变量是在路由器本身内部克隆的(设计禁止使用全局变量)

在下面的测试中,我在测试类实例之前设置了服务器和GET。。所以我希望在测试过程中正确地找到它们的值。 相反,它们是完全空的,当然,测试失败

知道我做错了什么吗

谢谢

/**
  * Test external class with valid UUID
  * 
  */
public function testGetClassPermissionExternal() {
    $TEST_SERVER_DATA = array(
        'REQUEST_URI' => 'https://sviluppo.pardgroup.com/test',
        'SERVER_PORT' => 443,
        'SERVER_NAME' => 'sviluppo.pardgroup.com'
    );
    // Due to bad design superglobal $_SERVER need to be fullfilled.
    $_SERVER = $TEST_SERVER_DATA;
    $this->router->setSERVER($TEST_SERVER_DATA);

    $TEST_POST_DATA = array('uuid' => self::$UUID);
    $this->router->setGET($TEST_POST_DATA);

    $this->class = \permission::getInstace($this->router);

    $test_class = array("permissionTest/external");
    $this->assertFalse($this->invokeMethod($this->class, "getClassPermission", $test_class));
}

听起来你需要看看backupglobals。考虑到你问题中的信息,你的问题很难回答。看起来好像在其他地方,$\u SERVER superglobal被设置为空。但我们只能猜测。我不明白的是,对于router对象,如果您注入这些值,您就不需要再依赖于超全局。从您的代码中删除$\u服务器到尽可能少的地方可能是值得的。