因此,我已经开始在我的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()
内,但这意味着每次我都想返回相同的服务时,都会返回一个新的服务实例。实例。
那么我有什么想念的吗?这甚至是正确的方法吗?
我非常感谢您提供有关此问题的任何形式的指导
答案 0 :(得分:0)
我建议配置PHPUnit来加载设置应用程序DI的Phalcon引导程序文件。
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="./bootstrap.php">
您可能必须将./bootstrap.php
更改为引导应用程序的Phalcon实例和DI的文件。