Итак, я начал внедрять модульное тестирование как часть моего приложения 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()
, однако это означало, что каждый раз возвращался новый экземпляр моего сервиса, когда я хотел бы просто получить тот жепример.
Так чего-то мне не хватает?Это даже правильный способ сделать это?
Буду очень признателен за любые указания по этому вопросу