Zend Framework 1:在测试期间替换引导资源

时间:2019-04-07 00:25:11

标签: php testing zend-framework

(我知道ZF1已经死了,但我正在尝试改进测试,以便可以从中过渡过来。)

在ZF1引导文件中,我可以定义资源(例如数据库连接),并在整个应用程序中使用它们。我想在集成测试中用模拟代替这些资源中的一些,但是我不确定最好的方法。

我可以这样define a resource

body {
  background-color: lightblue;
}

hr {
  border: 0;
  width: 300px;
  margin: 16px auto;
  height: 2px;
  background-image: url("data:image/svg+xml,%3Csvg width='300' height='2' viewBox='0 0 376 2' fill='none' xmlns='http://www.w3.org/2000/svg'%3E %3Cline y1='0.5' x2='300' y2='0.5' stroke='black' stroke-opacity='0.1'/%3E %3Cline y1='1.5' x2='300' y2='1.5' stroke='white' stroke-opacity='0.3'/%3E %3C/svg%3E ");
}

然后我的控制器可以像这样检索它:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    public function _initMyResource() {
        return new MyResource();
    }
}

然后我的controller test可能像这样:

class MyController extends Zend_Controller_Action {
    public function indexAction() {
        $myResource = $this->getInvokeArg('bootstrap')->getResource('MyResource');
    }
}

问题在于,当调用我的class MyTestCase extends Zend_Test_PHPUnit_ControllerTestCase { protected function setUp() { $this->bootstrap = array($this, 'appBootstrap'); parent::setUp(); } public function appBootstrap() $this->application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $this->application->bootstrap(); } public function testSample() { $myResource = new MyMockResource(); // what do I do with it? $this->dispatch('/index'); } } 方法时,所有资源都会被setUp的{​​{1}}方法引导。

但是我想在我的个别测试方法中在Zend_Test_PHPUnit_ControllerTestCase之后替换诸如appBootstrap之类的某些资源。有什么好方法吗?我仍然希望它们默认使用其原始值,但是我希望能够在必要时替换它们。

是否有更典型的方法?

0 个答案:

没有答案