测试 – PHPUnit / DBUnit处理时间戳列
发布时间:2020-12-13 16:17:02 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用 PHPUnit / DBUnit来测试我的Zend Framework DbTable模型.我正在被带有时间戳的表格绊倒. 我试图使用assertDataSetsEqual来比较插入的实际结果与预期的结果.当然,当我将记录插入带有时间戳的表中时,时间戳字段将填充当前日期/时间.表示预期数
我正在尝试使用
PHPUnit / DBUnit来测试我的Zend Framework DbTable模型.我正在被带有时间戳的表格绊倒.
我试图使用assertDataSetsEqual来比较插入的实际结果与预期的结果.当然,当我将记录插入带有时间戳的表中时,时间戳字段将填充当前日期/时间.表示预期数据的数据集是静态的,因此时间戳不匹配. 我该如何处理这种情况?我可以使断言忽略时间戳列吗? 解决方法
由于
this blog post,我刚刚找到了更好的解决方案.
我创建了一个函数,让我轻松断言我的两个数据集是相等的. protected function assertDataSetEquals( $ExpectedXMLFileName,array $options = array()) { $model = (isset($options['model'])) ? $options['model'] : $this->_object; $excludeColumns = (isset($options['excludeColumns'])) ? $options['excludeColumns'] : null; $ds = new Zend_Test_PHPUnit_Db_DataSet_DbTableDataSet(); $ds->addTable($model); $dsFiltered = (isset($excludeColumns)) ? $this->filterColumns($model,$ds,$excludeColumns) : $ds; $this->assertDataSetsEqual( $this->createFlatXmlDataSet( APPLICATION_PATH . '/../tests/fixtures/models/' . $ExpectedXMLFileName . '.xml' ),$dsFiltered ); } 以及一个返回过滤数据集的私有函数. private function filterColumns( $model,$dataSet,$excludeColumns) { $dsFiltered = new PHPUnit_Extensions_Database_DataSet_DataSetFilter($dataSet); $dsFiltered->setExcludeColumnsForTable( $model->getName(),$excludeColumns ); return $dsFiltered; } 现在比较两个数据集,同时排除任何列我只是这样做. $this->assertDataSetEquals( 'TableWithTimestampIWantToIgnoreUpdate',array('excludeColumns'=>array('timestamp','id')) ); 这使得测试与具有时间戳列的表对应的模型更加容易/更简洁. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |