Unit testing Phalcon 3(从2升级)中的单元测试,DI can';找不到服务

Unit testing Phalcon 3(从2升级)中的单元测试,DI can';找不到服务,unit-testing,phalcon,Unit Testing,Phalcon,我很难将一个旧项目从Phalcon2(2.0.9)迁移到Phalcon3(3.1.2)。代码本身似乎运行正常(乍一看),但单元测试就是不起作用。 我已经阅读了文档(),甚至从头开始重新构建了TestHelper和UnitTestCase,以确保一切就绪,但在测试中,尤其是DI容器在Phalcon 3中的工作方式似乎与Phalcon 2中的工作方式大不相同 例如: 需要在UnitTestCase中的“setUp()”开头运行“parent::setUp()” UnitTestCase末尾的“pa

我很难将一个旧项目从Phalcon2(2.0.9)迁移到Phalcon3(3.1.2)。代码本身似乎运行正常(乍一看),但单元测试就是不起作用。 我已经阅读了文档(),甚至从头开始重新构建了TestHelper和UnitTestCase,以确保一切就绪,但在测试中,尤其是DI容器在Phalcon 3中的工作方式似乎与Phalcon 2中的工作方式大不相同

例如:

  • 需要在UnitTestCase中的“setUp()”开头运行“parent::setUp()”
  • UnitTestCase末尾的“parent::setUp()”需要更改为“$this->setDi($di)”
  • 配置在所有测试中都是未知的,除非在UnitTestCase中明确使用“$this->setConfig($config)”(我花了几个小时才弄清楚)
  • 似乎我需要在DI中注册“请求”和“响应”(作为共享),以运行任何需要请求或响应对象的单元测试。这在以前是不必要的。尽管测试仍然不起作用,但至少服务“请求/响应”未知的警告消失了
  • DI现在不知道“modelsManager”,我还需要在DI中注册“modelsMetadata”以使单元测试正常工作。这对于Phalcon 2来说也是不必要的
而且它仍然不起作用(尽管我通过上述修复修复了数百条警告),现在我在运行单元测试时收到消息“Phalcon\Di\Exception:在依赖项注入容器中找不到服务“filter”,该测试尝试使用“$form->isValid($post)”验证表单这对Phalcon 2很有效

我已经为此挣扎了几天,现在开始计划根本不升级到Phalcon 3,而是让Phalcon 2的旧服务器为遗留项目运行,尽管这感觉像是失败。。。有没有人遇到过同样的问题?这真的是升级到Phalcon 3的一种难以置信的方式吗

下面是我的一些代码TestHelper:

include __DIR__ . '/../../../vendor/autoload.php';
$loader = new \Phalcon\Loader();
$loader->registerDirs([ROOT_PATH]));
$loader->registerNamespaces( ... );
$loader->register();
$di = new FactoryDefault();
Di::reset();
Di::setDefault($di);
UnitTestCase(针对每个模块):


使用DI默认值进行测试并预注册您拥有的其余服务怎么样。@daison12006013我想我就是这么做的?至少这是文档所建议的,以及它在Phalcon2中的工作方式。但为什么我现在需要注册请求和响应?此外,我不知道如何注册“过滤器”(以及为什么必须注册)。我用一些代码编辑了我的问题。
abstract class UnitTestCase extends PhalconTestCase
{
    public function setUp()
    {
        parent::setUp();
        $di = Di::getDefault();
        (... setting my services as well as Request/Response here...)
       $this->setDi($di);
    }
}