opH*_*AME 2 php phpunit zend-framework
我已经使用Zend Framework研究了PHPUnit的一些示例,但有一部分我不理解.
在大多数示例中,Application Bootstrap从setUp()Method中的某种baseClass运行.
为什么不__construct()呢?有什么好理由吗?
只是为了记录,我想这是你所指的具体代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
在单元测试中,使用setUp和tearDown方法
将世界设置为已知状态,然后在测试完成时将其返回到其原始状态.这种已知状态称为测试夹具.
处理夹具的方式可能在xUnit库之间有所不同,但概念保持不变.另请参阅PHPUnit手册中的fixture章节:
PHPUnit支持共享设置代码.在运行测试方法之前,将调用名为setUp()的模板方法.setUp()是您创建要测试的对象的位置.一旦测试方法运行完毕,无论是成功还是失败,都会调用另一个名为tearDown()的模板方法.tearDown()是清理测试对象的地方.
因此,PHPUnit负责在测试用例类中包含的每个测试setUp方法之前执行该方法,而在每次执行之后进行处理.tearDown
话虽如此,Zend Framework在PHPUnit之上提供了一个额外的层来运行功能测试,这是对功能的黑盒测试,而不是源代码的各个单元.这是通过扩展Zend_Test_PHPUnit_ControllerTestCase来实现的,这样就可以保证对应用程序资源的访问.
在此特定示例中,在执行测试用例中的每个测试之前引导应用程序.如果我们考虑到我们在任何地方都不需要应用程序资源,例如在原始单元测试(其他测试用例的一部分)中,这是有道理的.