Met*_*der 3 database phpunit yaml
我正在尝试构建一个使用PHPUnit的数据库扩展的测试用例.我已经按照官方文档和Mike Lively的这篇文章,但PHPUnit一直在抱怨:
1) ClearanceProfileTest::testFetchPrivileges
PHPUnit_Extensions_Database_Operation_Exception: COMPOSITE[TRUNCATE] operation failed on query:
DELETE FROM "profile_privilege_mappings"
using args: Array
(
)
[SQLSTATE[HY000]: General error: 1 no such table: profile_privilege_mappings]
Run Code Online (Sandbox Code Playgroud)
我认为错误是由于我的数据库架构未设置引起的,但我找不到加载它的方法.我尝试加载我的.sql文件内容,并将其作为PDO查询执行,但它什么也没做.
这是我的测试用例代码:
class ClearanceProfileTest extends PHPUnit_Extensions_Database_TestCase
{
/**
* @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
*/
public function getConnection() {
$pdo = new PDO('sqlite::memory:');
return $this->createDefaultDBConnection($pdo, ':memory:');
}
/**
* @return PHPUnit_Extensions_Database_DataSet_IDataSet
*/
protected function getDataSet() {
$yaml = dirname(__FILE__) . "/ClearanceProfileTestDataset.yml";
$dataset = new PHPUnit_Extensions_Database_DataSet_YamlDataSet($yaml);
return $dataset;
}
public function testFetchPrivileges() {
$cp = ClearanceProfile::retrieve_one('id = ?', 1);
$privileges = $cp->fetchPrivileges();
$this->assertEquals(count($privileges), 1);
}
}
Run Code Online (Sandbox Code Playgroud)
在默认实现中,数据库扩展将使用getDataSet返回的数据集对数据库执行"清理插入"操作.干净的插入操作将截断数据集中的所有表(而不是数据库中的所有表),然后在数据集中插入行.解决方案是在运行测试之前创建表.
此外,您可以通过覆盖getSetUpOperation()和getTearDownOperation()方法来修改默认功能