加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

测试 – 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'))
        );

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读