测试 – PHPUnit / DBUnit处理时间戳列

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了测试 – PHPUnit / DBUnit处理时间戳列脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 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'))
        );

这使得测试与具有时间戳列的表对应的模型更加容易/更简洁.

@H_419_44@

脚本宝典总结

以上是脚本宝典为你收集整理的测试 – PHPUnit / DBUnit处理时间戳列全部内容,希望文章能够帮你解决测试 – PHPUnit / DBUnit处理时间戳列所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。