【发布时间】:2010-05-25 12:21:06
【问题描述】:
我研究了一些使用 Zend Framework 的 PHPUnit 示例,但有一部分我不理解。
在大多数示例中,应用程序引导程序从内部的某种基类运行
setUp() 方法。
为什么不在__construct()?有什么好的理由吗?
【问题讨论】:
标签: php zend-framework phpunit
我研究了一些使用 Zend Framework 的 PHPUnit 示例,但有一部分我不理解。
在大多数示例中,应用程序引导程序从内部的某种基类运行
setUp() 方法。
为什么不在__construct()?有什么好的理由吗?
【问题讨论】:
标签: php zend-framework phpunit
仅作记录,我想这是您所指的具体代码:
class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
public $application;
public function setUp()
{
$this->application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/config/settings.ini'
);
$this->bootstrap = array($this, 'bootstrap');
parent::setUp();
}
public function tearDown()
{
Zend_Controller_Front::getInstance()->resetInstance();
$this->resetRequest();
$this->resetResponse();
$this->request->setPost(array());
$this->request->setQuery(array());
}
public function bootstrap()
{
$this->application->bootstrap();
}
}
在单元测试中,setUp 和 tearDown 方法用于
将世界设置为已知状态,然后 然后将其恢复到原始状态 当测试完成时。这种已知状态称为测试的fixture。
固定装置的处理方式可能因 xUnit 库而异,但概念保持不变。另请参阅 PHPUnit 手册中的 fixtures chapter:
PHPUnit 支持共享设置 代码。在运行测试方法之前, 称为 setUp() 的模板方法是 调用。 setUp() 是您创建的地方 你会反对的对象 测试。一旦测试方法有 跑完了,是否成功 或失败,另一种模板方法 调用了 tearDown() 。 tearDown() 是你清理的地方 您测试过的对象。
因此,PHPUnit 负责在测试用例类中包含的每个测试方法之前执行setUp 方法,而在每次执行之后处理tearDown。
话虽如此,Zend 框架在 PHPUnit 之上提供了一个额外的层,用于运行功能测试,这是对特性而不是对单个源代码单元的黑盒测试。这是通过扩展 Zend_Test_PHPUnit_ControllerTestCase 来实现的,从而保证对应用程序资源的访问。
在这个特定的示例中,应用程序在测试用例中的每个测试执行之前被引导。如果我们考虑到我们不需要无处不在的应用程序资源,例如在原始单元测试(其他测试用例的一部分)中,这是有道理的。
【讨论】: