(我知道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
之类的某些资源。有什么好方法吗?我仍然希望它们默认使用其原始值,但是我希望能够在必要时替换它们。
是否有更典型的方法?