Dependency injection 如何在DI中用mock替换类?法尔康+;共接受
我尝试使用Codeception测试框架为我的控制器编写功能测试。我想用假服务代替DI中的真实服务 控制器代码示例: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
我建议您从创建一个单独的助手开始,创建并注入依赖项,如下所示:
# 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']
);
}
}