Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 如何在DI中用mock替换类?法尔康+;共接受_Dependency Injection_Phalcon_Codeception - Fatal编程技术网

Dependency injection 如何在DI中用mock替换类?法尔康+;共接受

Dependency injection 如何在DI中用mock替换类?法尔康+;共接受,dependency-injection,phalcon,codeception,Dependency Injection,Phalcon,Codeception,我尝试使用Codeception测试框架为我的控制器编写功能测试。我想用假服务代替DI中的真实服务 控制器代码示例: 我建议您从创建一个单独的助手开始,创建并注入依赖项,如下所示: # functional.suite.yml class_name: FunctionalTester modules: enabled: - Helper\MyService - Phalcon: part: services

我尝试使用Codeception测试框架为我的控制器编写功能测试。我想用假服务代替DI中的真实服务

控制器代码示例:


我建议您从创建一个单独的助手开始,创建并注入依赖项,如下所示:

# functional.suite.yml
class_name: FunctionalTester
modules:
    enabled:
        - Helper\MyService
        - Phalcon:
            part: services
            # path to the bootstrap
            bootstrap: 'app/config/bootstrap.php'
        # Another modules ...
<?php
namespace App\Functional;

use Helper\MyService;

class IndexControllerCest
{
  /** @var MyService */
  protected $myService;

  protected function _inject(MyService $myService)
  {
      $this->myService = $myService;
  }

  public function testIndexAction(FunctionalTester $I)
  {
    $I->wantTo(
      'mock myService, replace real object that in controller with fake one'
    );

    $this->myService->haveMyServiceInDi();
    $I->amOnRoute('index.route');
  }
}
创建一个单独的服务:

<?php
namespace Helper;

use Codeception\Module;

/** @var \Codeception\Module\Phalcon */
protected $phalcon;

class MyService extends Module
{
  public function _initialize()
  {
      $this->phalcon = $this->getModule('Phalcon');
  }

  public function haveMyServiceInDi()
  {
    $this->phalcon->addServiceToContainer(
      'myService',
      ['className' => '\My\Awesome\Service']
    );
  }
}