このブログ投稿のおかげで、これに対するはるかに優れた解決策を見つけました。
2つのデータセットが等しいことを簡単に表明できる関数を作成しました。
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;
}
次に、列を除外して2つのデータセットを比較するために、これを実行します。
$this->assertDataSetEquals(
'TableWithTimestampIWantToIgnoreUpdate',
array('excludeColumns'=>array('timestamp','id'))
);
これにより、タイムスタンプ列を持つテーブルに対応するモデルをテストするためのはるかに簡単でクリーンな方法が可能になります。