我想在 Zend Framework 应用程序中使用 PHP 单元。我需要在测试中进行几个数据库写入操作。我想在 setUpBeforeClass() 方法中启动一个 MySQL 事务。这是可能的,但如果我尝试在 tearDownAfterClass() 方法中回滚事务,他会抛出异常并显示消息“没有活动事务”。测试方法在数据库中进行写入操作。但是,如果我在测试方法本身中启动事务。它像我想要的那样工作。我不明白它为什么会有这样的反应。知道的人解释一下吗?
<?php
class ConferenceControllerTest
extends PHPUnit_Framework_TestCase
{
/**
* A database connection.
* @var Zend_Db_Adapter_Pdo_Mysql
*/
protected static $hostDb = null;
public static function setUpBeforeClass()
{
static::$hostDb = Zend_Registry::get('db_host');
static::$hostDb->beginTransaction();
// The transaction for the Adapter is activated. But not inside the tests anymore.
}
public function testTest1()
{
// At this position teh transaction is not setted anymor? Why?
static::$hostDb->beginTransaction();
$sql = 'INSERT INTO test(test) VALUES(5);';
static::$hostDb->exec($sql);
}
public static function tearDownAfterClass()
{
try
{
static::$hostDb->rollBack();
}
catch(Exception $exception)
{
$message = $exception->getMessage();
Zend_Debug::dump($message);
}
}
}