Как использовать файл csv в тесте PHPUnit

Я написал кейс DataTest по примеру 4.5 руководства PHPUnit, URL:
http://www.phpunit.de/manual/3.6/en/writing-tests-for -phpunit.html#writing-tests-for-phpunit.data-providers.
Но я столкнулся с ошибкой:

Поставщик данных, указанный для DataTest::testAdd, недействителен.
Набор данных #0 недействителен.

Я подумал, что, может быть, я неправильно редактирую файл data.csv, затем я использовал php-функцию fputcsv() для создания файла data.csv, но это также не сработало, я хочу знать, почему, и как решить эту проблему. Спасибо!

P.S.: данные в 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);

5
задан Zongshu Lin 21 May 2012 в 07:36
поделиться