迷惘的码农。
分类:
2008-03-27 09:12:07
当给你的软件创建测试时,你可能碰到需要单元测试的数据库代码。已经创建的数据库扩展提供了简便的方法将数据库置于某个已知状态,执行你的数据库相关的代码,并且确保在数据库中找到期望的数据。
创建一个新的数据库单元测试的最快方法时扩展类PHPUnit_Extensions_Database_TestCase
。该类提供了一些功能,可用来创建数据库连接,向数据库中植入数据,以及之后执行一个对数据库中的内容和可构成多种格式的数据集的比较的测试。你能在中看到getConnection()
和getDataSet()
的实现例子。
范例 9.1: 构造一个数据库测试用例
require_once 'PHPUnit/Extensions/Database/TestCase.php';
class DatabaseTest extends PHPUnit_Extensions_Database_TestCase
{
protected function getConnection()
{
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');
return $this->createDefaultDBConnection($pdo, 'testdb');
}
protected function getDataSet()
{
return $this->createFlatXMLDataSet(dirname(__FILE__).'/_files/bank-account-seed.xml');
}
}
?>
方法getConnection()
必须返回一个接口PHPUnit_Extensions_Database_DB_IDatabaseConnection
的实现。方法createDefaultDBConnection()
能用来返回一个数据库连接。它接受一个PDO
对象作为第一个参数,以及要测试的schema的名字作为第二个参数。
方法getDataSet()
必须返回一个接口PHPUnit_Extensions_Database_DataSet_IDataSet
的实现。当前PHPUnit中有三种数据集可用。这些数据集在中论述。
表 9.1. 数据库测试用例方法
方法 | 含义 |
---|---|
PHPUnit_Extensions_Database_DB_IDatabaseConnection getConnection() | 需要实现为返回数据库连接,该连接将被用于检查期望的数据集和表。 |
PHPUnit_Extensions_Database_DataSet_IDataSet getDataSet() | 需要实现为返回数据集,该数据集将被用于数据库和装配和拆卸操作。 |
PHPUnit_Extensions_Database_Operation_DatabaseOperation getSetUpOperation() | 需要重写为返回一个特定操作,该操作将在每个测试的开端在测试数据库上执行。中有各种操作的详细信息。 |
PHPUnit_Extensions_Database_Operation_DatabaseOperation getTearDownOperation() | 需要重写为返回一个特定操作,该操作将在每个测试的末端在测试数据库上执行。中有各种操作的详细信息。 |
PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection createDefaultDBConnection(PDO $connection, string $schema) | 返回一个封装了PDO 对象$connection 的数据库连接。$schema 指定了将被测试的数据库schema。该方法的结果可从getConnection() 返回。 |
PHPUnit_Extensions_Database_DataSet_FlatXmlDataSet createFlatXMLDataSet(string $xmlFile) | 返回一个平整的xml数据集,它是从位于$xmlFile 指定的绝对路径处的xml文件创建的。关于平整的xml文件的更多详细信息可在找到。该方法的结果可从getDataSet() 返回。 |
PHPUnit_Extensions_Database_DataSet_XmlDataSet createXMLDataSet(string $xmlFile) | 返回一个xml数据集,它是从位于$xmlFile 指定的绝对路径处的xml文件创建的。关于xml文件的更多详细信息可在找到。该方法的结果可从getDataSet() 返回。 |
void assertTablesEqual(PHPUnit_Extensions_Database_DataSet_ITable $expected, PHPUnit_Extensions_Database_DataSet_ITable $actual) | 如果表$expected 的内容不匹配表$actual 中的内容则报错。 |
void
assertDataSetsEqual(PHPUnit_Extensions_Database_DataSet_IDataSet
$expected, PHPUnit_Extensions_Database_DataSet_IDataSet $actual) | 如果数据集$expected 的内容不匹配数据集$actual 中的内容则报错。 |
...
...
...
...
...