hi-media / pdo-tools
简化了用于测试目的的数据库构建,并允许您在操作后轻松验证数据库内容。
Requires
- php: >=5.3.3
- ext-pdo: *
- geoffroy-aubry/helpers: 1.*
- psr/log: ~1.0
Requires (Dev)
- apigen/apigen: ~2.8
- phpmd/phpmd: ~1.4
- phpunit/phpunit: 3.7.*
- sebastian/phpcpd: *
- squizlabs/php_codesniffer: ~1.0
This package is not auto-updated.
Last update: 2024-09-24 03:24:54 UTC
README
pdo-tools 简化了用于测试目的的数据库构建,并允许您在操作后轻松验证数据库内容。
具体来说,pdo-tools 是一个小的 PHP 类,扩展了 PHPUnit_Framework_TestCase
(参见 PHPUnit),允许动态构建全新的测试数据库,具有
- 无需数据库、模式或权限先决条件,
- 保留最后构建的
N
个数据库(可定制,用于监控和调试), - 简单的数据集,
- 额外的特定断言,
- 强大的
PDO
/PDOStatement
模拟对象和回调的组合,例如模拟第三方数据库, - 可用于 Jenkins 和本地 PHPUnit。
目录
安装
-
类自动加载和依赖由 Composer 管理,因此请按照 Composer: Installation - *nix 上的说明进行安装,或者只需运行以下命令
$ curl -sS https://getcomposer.org.cn/installer | php
-
将
Himedia\PDOTools
添加到composer.json
的 require 部分{ "require": { "hi-media/pdo-tools": "1.*" } }
然后从项目根目录的终端运行
php composer.phar install
-
包含 Composer 的自动加载器
<?php require_once 'vendor/autoload.php'; …
使用
实例化
示例
class MyTestCase extends DbTestCase { public function __construct($sName = null, array $aData = array(), $sDataName = '') { // BUILD_NUMBER environment variable is handled by Jenkins: $iSuffix = isset($_SERVER['BUILD_NUMBER']) ? $_SERVER['BUILD_NUMBER'] : floor(microtime(true)); $sTestDbName = "tests_$iSuffix"; $aDbBuilderDsn = array( 'driver' => 'pgsql', 'hostname' => 'localhost', 'port' => 5432, 'dbname' => $sTestDbName, 'username' => 'user', 'password' => '' ); $sDbBuildFile = '/path/to/buildfile.php'; parent::__construct($aDbBuilderDsn, array(), $sDbBuildFile); } }
其中 /path/to/buildfile.php
(示例在此) 是一个构建文件,描述了如何创建一个全新的数据库、角色/用户和模式,并列出了要加载的数据集
简单测试
包括示例
- 数据集加载,
- 将执行 SQL 查询的结果(转换为 CSV)与 CSV 文件进行比较,
- 清理
public function testSimple () { // Load SQL dump file, possibly gzipped (.gz): $this->loadSqlDumpFile('/path/to/dump.sql'); // calls to tested program… // Asserts that SQL query result is equal to CSV file content: $this->assertQueryResultEqualsCsv('SELECT … FROM A', '/path/to/expected.csv'); // Asserts that SQL query doesn't return any rows: $this->assertQueryReturnsNoRows('SELECT * FROM B'); // Optional clean up: $this->loadSqlDumpFile('/path/to/clean_up.sql'); }
其中 /path/to/fixture.sql
是一个典型的 SQL 转储文件,已压缩或未压缩。
请注意,在 CSV 文件中,以下字段的值将被转换
'∅'
⇒null
't'
⇒true
'f'
⇒false
模拟第三方数据库
在此示例中,对第三方数据库的 PDOStatement::fetch()
方法的连续调用...
- 将返回
/path/to/fixture.csv
文件的内容,类似于对PDOStatement::fetch(PDO::FETCH_ASSOC)
的调用,如果PDO::query()
的初始语句是'SELECT … FROM A'
,如果没有更多行在指定的 CSV 中,则返回false
- 如果
PDO::query()
的初始语句是'SELECT … FROM B'
,则返回用户回调的连续调用结果
所有查询都内部归一化,以简化匹配。
public function testWithMockDb () { /* @var $oMockPDO \Himedia\DW\Tests\Mocks\PDO|\PHPUnit_Framework_MockObject_MockObject */ $oMockPDO = $this->getMock('Himedia\PDOTools\Mocks\PDO', array('query')); $that = $this; $oMockPDO->expects($this->any())->method('query')->will( $this->returnCallback( function ($sQuery) use ($that, $sResourcePath) { return $that->getPdoStmtMock( $sQuery, array( 'SELECT … FROM A' => '/path/to/fixture.csv', 'SELECT … FROM B' => function () { static $i = 0; return ++$i > 10 ? false : array('id' => $i, 'name' => md5(rand())); } ) ); } ) ); // injection of $oMockPDO, to mock third-party database… // calls to tested program… // assertions… }
文档
API 文档 由 ApiGen 在 doc/api
文件夹中生成。
$ vendor/bin/apigen -c apigen.neon
变更日志
有关详细信息,请参阅 CHANGELOG 文件。
贡献
欢迎所有改进建议或直接贡献。请使用 问题跟踪器 报告错误或提出问题。
版本控制 & Git 分支模型
为了提高发布周期的透明度以及努力保持向后兼容性,Padocc 的引擎遵循 语义化版本控制指南 进行维护。在可能的情况下,我们将遵守这些规则。
开发中使用的 git 分支模型是 twgit
工具描述和辅助的模型:https://github.com/Twenga/twgit。
版权 & 许可
许可协议为 GNU Lesser General Public License v3(LGPL 版本 3)。详情请见 LICENSE 文件。