PHPUnit数据库测试

8
我正在使用PHPUnit测试通过存储对象插入对象。每个领域对象都有一个添加和最后修改的时间戳,由存储对象自动处理。我可以使用PHPUnits DB扩展方法assertDataSetsEqual,并传递如下所示的XML数据集。问题是,无法将添加和最后修改硬编码到XML数据集中,因为这些时间戳会自动更改。我能否告诉PHPUnit忽略这些列?或者以另一种方式(不是XML)比较表输出,在那里我可以忽略这些列?
$user = new Social_User();
$user->setFk_mswuserId(10);
$user->setFirstName('Gavin');

$store = new Storage();
$store->save($user);

$xml_dataset = $this->createFlatXMLDataSet('after-new.xml');
$this->assertDataSetsEqual($xml_dataset, $this->getConnection()->createDataSet());

XML数据集

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
            <user id="1" password="NULL" ip="0" added="0" authenticated="0" lat="0" lon="0" avatar="0" fk_mswuserId="1" timezoneoffset="0" firstName="Ben" lastName="Freeston" deleted="0" lastModified="0" />
            <user id="2" password="NULL" ip="0" added="0" authenticated="0" lat="0" lon="0" avatar="0" fk_mswuserId="10" timezoneoffset="0" firstName="Gavin" lastName="Cooper" deleted="0" lastModified="0"/>
</dataset>
1个回答

9

根据http://www.phpunit.de/ticket/492,这已经是内置的。

此外,请参阅 M.Lively(主要的DBUnit作者)的这些幻灯片:

以及 B. Eberlei 的 PHPUnit DB测试终极指南

所以它应该按以下方式工作:

$database_dataset = new PHPUnit_Extensions_Database_DataSet_DataSetFilter ( 
    $this->getConnection()->createDataSet(array('bank_account')), 
    array('bank_account' => array ('date_created')) // excluded
); 

3
@Gcoop,那更多是因为知道在哪里找,而不是其他原因。在你问之前,我根本不知道过滤器的存在。所以谢谢你让我搜索。我也学到了新东西;) - Gordon
表格过滤也有同样的功能:new PHPUnit_Extensions_Database_DataSet_TableFilter($table, $excludeColumns) - Arc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接