PHPUnit与Zend Framework

opH*_*AME 2 php phpunit zend-framework

我已经使用Zend Framework研究了PHPUnit的一些示例,但有一部分我不理解.

在大多数示例中,Application Bootstrap从setUp()Method中的某种baseClass运行.

为什么不__construct()呢?有什么好理由吗?

我正在谈论的例子

nuq*_*qsa 7

只是为了记录,我想这是你所指的具体代码:

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)

在单元测试中,使用setUptearDown方法

将世界设置为已知状态,然后在测试完成时将其返回到其原始状态.这种已知状态称为测试夹具.

处理夹具的方式可能在xUnit库之间有所不同,但概念保持不变.另请参阅PHPUnit手册中的fixture章节:

PHPUnit支持共享设置代码.在运行测试方法之前,将调用名为setUp()的模板方法.setUp()是您创建要测试的对象的位置.一旦测试方法运行完毕,无论是成功还是失败,都会调用另一个名为tearDown()的模板方法.tearDown()是清理测试对象的地方.

因此,PHPUnit负责在测试用例类中包含的每个测试setUp方法之前执行该方法,而在每次执行之后进行处理.tearDown

话虽如此,Zend Framework在PHPUnit之上提供了一个额外的层来运行功能测试,这是对功能的黑盒测试,而不是源代码的各个单元.这是通过扩展Zend_Test_PHPUnit_ControllerTestCase来实现的,这样就可以保证对应用程序资源的访问.

在此特定示例中,在执行测试用例中的每个测试之前引导应用程序.如果我们考虑到我们在任何地方都不需要应用程序资源,例如在原始单元测试(其他测试用例的一部分)中,这是有道理的.