我尝试使用PHPUnit_Extensions_Database_TestCase来验证应用程序代码中的一些数据库操作。
我已经制作了一个类似于此的CSV转储(其中空记录为postgres null字符):
id,one,two,three
1, a,b,c
2, d,e,f
3,,,
4,g,,h
我尝试按如下方式加载数据集:
$dataSet = new PHPUnit_Extensions_Database_DataSet_CsvDataSet();
$dataSet->addTable('test',dirname(__FILE__)."/tables/test.csv");
我得到以下内容:
PHPUnit_Extensions_Database_Operation_Exception: COMPOSITE[INSERT] operation failed on query:
INSERT INTO example ("id", "one", "two", "three") VALUES (?, ?, ?, ?);
[SQLSTATE[22007]: Invalid datetime format: 7 ERROR: invalid input syntax for type timestamp:""]
I've tried multiple characters in place of an empty string, including NULL & "\0".
我正在考虑尝试覆盖默认方法来替换PHP null值来代替这些值。在我走这条路之前,还有其他解决办法吗?
答案 0 :(得分:2)
您可以使用PHPUnit文档中描述的替换,但空值必须替换为其他类似 ## NULL ## :
$dataset = new \PHPUnit_Extensions_Database_DataSet_CsvDataSet();
$dataset->addTable('myTable', __DIR__.'/path/myTable.csv');
$replacementDs = new \PHPUnit_Extensions_Database_DataSet_ReplacementDataSet($dataset);
$replacementDs->addFullReplacement('##NULL##', null);
return $replacementDs;
答案 1 :(得分:0)
从PHPUnit文档:
虽然使用Excel或OpenOffice进行编辑非常方便, 您无法使用CSV数据集指定NULL值。一个空列 将导致数据库默认空值插入到 列。
同样在PHPUnit文档中:
How to handle NULL with Flat XML / CSV Datasets? Do not do this. Instead, you should use either the XML or the YAML DataSets.