Я написал случай DataTest, следующий за примером 4.5 руководства PHPUnit, URL-адрес:
http://www.phpunit.de/manual/3.6/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers.
Но я наткнулся с ошибкой:Как использовать файл csv в PHPUnit test
The data provider specified for DataTest::testAdd is invalid.
Data set #0 is invalid.
Я думал, что это может быть, что я отредактировать файл data.csv в неправильном направлении, то я использовал PHP функцию fputcsv() для создания data.csv файла, но также не работал, я хочу знать, почему и как решить эту проблему. Благодаря!
PS: данные в data.csv является:
0,0,0
0,1,1
Коды показать следующим образом:
DataTest.php
require 'CsvFileIterator.php';
class DataTest extends PHPUnit_Framework_TestCase
{
public function provider()
{
return new CsvFileIterator('data.csv');
}
/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}
}
CsvFileIterator.php
class CsvFileIterator implements Iterator
{
protected $file;
protected $key = 0;
protected $current;
public function __construct($file)
{
$this->file = fopen($file, 'r');
}
public function __destruct()
{
fclose($this->file);
}
public function rewind()
{
rewind($this->file);
$this->current = fgetcsv($this->file);
$this->key = 0;
}
public function valid()
{
return !feof($this->file);
}
public function key()
{
return $this->key;
}
public function current()
{
return $this->current;
}
public function next()
{
$this->current = fgetcsv($this->file);
$this->key++;
}
}
data.csv файл создать с помощью функции fputcsv():
$data = array(
array(0, 0, 0),
array(0, 1, 1)
);
$fp = fopen('data.csv', 'w');
foreach($data as $v)
{
fputcsv($fp, $v);
}
fclose($fp);
Пожалуйста, покажите код вашей функции поставщика данных. Это важно, чтобы объяснить, где вы сделали ошибку. Добавьте его к своему вопросу, отредактировав его (вы можете сократить имена файлов и другие конкретные данные, которые не важны для совместного использования, чтобы понять вашу проблему). – hakre
@hakre, я добавил коды в свой вопрос, пожалуйста, помогите мне проанализировать и рассказать мне, почему ошибка встречается, спасибо! –
Проверьте конструктор, чтобы ваш итератор мог получить доступ к файлу. Например, вам может потребоваться передать полный путь (например, '__DIR__./Data.csv''). В качестве альтернативы используйте «true» в качестве [третьего параметра fopen] (http://uk3.php.net/manual/en/function.fopen.php), чтобы использовать путь include. – cmbuckley