如何使用PHPUnit数据库扩展表示CSV数据集中的NULL字符

时间:2015-03-06 19:29:38

标签: php postgresql phpunit

我尝试使用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值来代替这些值。在我走这条路之前,还有其他解决办法吗?

2 个答案:

答案 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.