41

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

4

6 回答 6

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');
    }
}

就这样...

于 2008-09-16T07:31:58.063 回答
7

他们在 Zend Developer Zone 上有一个“单元测试艺术简介”,其中涵盖了 PHPUnit。

于 2008-10-08T13:59:36.790 回答
2

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

于 2009-02-21T11:24:12.383 回答
1

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

然后我可以使用

phpunit --bootstrap ../bootstrap.php  PersonControllerTest.php 
于 2010-03-08T07:03:36.020 回答
0

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

于 2008-09-15T19:33:45.747 回答
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);

}
于 2011-04-18T23:27:40.443 回答