我想知道如何用 Zend_Test 和一般的 PHP 编写 PHPUnit 测试。
Thomas Schaaf
问问题
25479 次
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 回答