如何将PHPUnit与Zend Framework一起使用?

时间:2008-09-15 18:57:36

标签: php unit-testing zend-framework testing phpunit

我想知道如何用Zend_Test编写PHPUnit测试,一般用PHP编写。

6 个答案:

答案 0 :(得分:14)

我正在使用Zend_Test来完全测试所有控制器。设置起来非常简单,因为您只需要设置引导程序文件(引导文件本身不应该调度前端控制器!)。我的基本测试用例类如下所示:

abstract class Controller_TestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
    protected function setUp()
    {
        $this->bootstrap=array($this, 'appBootstrap');
        Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_NonPersistent());
        parent::setUp();
    }

    protected function tearDown()
    {
        Zend_Auth::getInstance()->clearIdentity();
    }

    protected function appBootstrap()
    {
        Application::setup();
    }
}

其中Application::setup();执行所有设置真实应用程序的设置任务。然后一个简单的测试看起来像这样:

class Controller_IndexControllerTest extends Controller_TestCase
{
    public function testShowist()
    {
        $this->dispatch('/');
        $this->assertController('index');
        $this->assertAction('list');
        $this->assertQueryContentContains('ul li a', 'Test String');
    }
}

这就是......

答案 1 :(得分:7)

他们在Zend Developer Zone上有一个“Introduction to the Art of Unit Testing”,它涵盖了PHPUnit。

答案 2 :(得分:2)

我发现this文章非常有用。另外Zend_Test文档也有很多帮助。 在这两个资源的帮助下,我成功地在Zend Framework的QuickStart tutorial中实现了单元测试,并为它编写了一些测试。

答案 3 :(得分:1)

使用ZF 1.10,我将一些引导代码放入tests / bootstrap.php(基本上是(public / index.php)中的内容,直到$ application-> bootstrap()。

然后我可以使用

运行测试
phpunit --bootstrap ../bootstrap.php  PersonControllerTest.php 

答案 4 :(得分:0)

我没有使用过Zend_Test,但我已经使用Zend_MVC等编写了针对应用程序的测试。最重要的是在测试设置中获得足够的引导代码。

答案 5 :(得分:0)

另外,如果您使用数据库事务,那么最好删除通过单元测试完成的所有事务,否则您的数据库将全部搞乱。

所以设置

public function setUp() {



    YOUR_ZEND_DB_INSTANCE::getInstance()->setUnitTestMode(true);



    YOUR_ZEND_DB_INSTANCE::getInstance()->query("BEGIN");

    YOUR_ZEND_DB_INSTANCE::getInstance()->getCache()->clear();

    // Manually Start a Doctrine Transaction so we can roll it back
    Doctrine_Manager::connection()->beginTransaction();
}

并且在拆解时你需要做的就是回滚

public function tearDown() {



    // Rollback Doctrine Transactions
    while (Doctrine_Manager::connection()->getTransactionLevel() > 0) {
        Doctrine_Manager::connection()->rollback();
    }

    Doctrine_Manager::connection()->clear();



    YOUR_ZEND_DB_INSTANCE::getInstance()->query("ROLLBACK");
    while (YOUR_ZEND_DB_INSTANCE::getInstance()->getTransactionDepth() > 0) {
        YOUR_ZEND_DB_INSTANCE::getInstance()->rollback();
    }
    YOUR_ZEND_DB_INSTANCE::getInstance()->setUnitTestMode(false);

}