繁体   English   中英

Phalcon PHP单元测试DI共享实例

[英]Phalcon PHP Unit Testing DI Shared Instance

因此,我已经开始在我的phalcon应用程序中实施单元测试,并且遇到了与使用Phalcon DI容器有关的问题。 可能只是我缺乏理解,但似乎无法让我的服务在所有测试用例中用作共享实例。 这是可以开始的吗? 我在网上搜索了尽可能多的资源,甚至按照Phaclon网站上的教程进行操作,但无济于事。 所以这是到目前为止我的文件

的init.php

<?php

 use Phalcon\Loader;
 use Phalcon\Di;
 use Phalcon\Di\FactoryDefault;

 ini_set("display_errors", 1);
 error_reporting(E_ALL);

 define("ROOT_PATH", __DIR__);
 define("SRC_PATH", __DIR__ . '/../src');

 set_include_path(
     ROOT_PATH . PATH_SEPARATOR . get_include_path()
 );

 // Required for phalcon/incubator
 include __DIR__ . "/../vendor/autoload.php";

 // Setup Phalcon autoloader.
 $loader = new Loader();

 $loader->registerDirs(
    [
      ROOT_PATH,
      SRC_PATH . '/util'
    ]
 );

 $loader->registerNamespaces(
    [
     'App\Test\Libs' => ROOT_PATH . '/libs'
    ]
);

$loader->register();

// Setup DI Container.
$di = new FactoryDefault();

$di->setShared('someClass', function () {
 return new \App\Test\Libs\SomeClass();
});

Di::setDefault($di);

现在在我的UnitTestCase中,如果我这样做

  public function setUp() { 
     parent::setUp();

     $di = Di::getDefault();

     var_dump($di->getServices()); // None of my services from the bootstrap show up ???
     $this->setDi($di);

     $this->_loaded = TRUE;
  }

由于上述原因,我对UnitTestCase进行扩展的实际测试均无法访问自定义服务。

我尝试在UnitTestCase setUp()移动Phalcon DI初始化,但是这意味着每次我想检索同一实例时,都会返回我的服务的新实例。

那有什么我想念的吗? 这甚至是正确的方法吗?

我非常感谢您提供有关此问题的任何形式的指导

我建议配置PHPUnit来加载设置应用程序DI的Phalcon引导程序文件。

<phpunit backupGlobals="false" backupStaticAttributes="false" bootstrap="./bootstrap.php">

您可能需要将./bootstrap.php更改为引导应用程序的Phalcon实例和DI的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM