Phalcon PHP单元测试DI共享实例

时间:2018-11-30 12:34:35

标签: php phpunit phalcon

因此,我已经开始在我的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 的所有实际测试都无法访问自定义服务。

我尝试将Phalcon DI初始化移至 UnitTestCase setUp()内,但这意味着每次我都想返回相同的服务时,都会返回一个新的服务实例。实例。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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