微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHPUnit:使用返回迭代器对象的数据提供者

如何解决PHPUnit:使用返回迭代器对象的数据提供者

我正在阅读 PHPUnit 的文档。我被困在示例 2.7 和示例 2.8 上。它显示了两个错误

  1. PHP 警告:fopen(data.csv):无法打开流:没有那个文件或目录
  2. 为 DataTest::testAdd 指定的数据提供程序无效。类型错误:fclose() 期望参数 1 是资源,给定布尔值

下面是 CsvFileIterator 类的代码

<?PHP declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class CsvFileIterator implements Iterator
{
    private $file;
    private $key = 0;
    private $current;

    public function __construct(string $file)
    {
        $this->file = fopen($file,'r');
    }

    public function __destruct()
    {
        fclose($this->file);
    }

    public function rewind(): void
    {
        rewind($this->file);

        $this->current = fgetcsv($this->file);
        $this->key     = 0;
    }

    public function valid(): bool
    {
        return !feof($this->file);
    }

    public function key(): int
    {
        return $this->key;
    }

    public function current(): array
    {
        return $this->current;
    }

    public function next(): void
    {
        $this->current = fgetcsv($this->file);

        $this->key++;
    }
}

下面是DataTest类的代码

<?PHP declare(strict_types=1);
use PHPUnit\Framework\TestCase;
require "CsvFileIterator.PHP";

final class DataTest extends TestCase
{
    /**
     * @dataProvider additionProvider
     */
    public function testAdd(int $a,int $b,int $expected): void
    {
        $this->assertSame($expected,$a + $b);
    }

    public function additionProvider(): CsvFileIterator
    {
        return new CsvFileIterator('data.csv');
    }
}

以下示例数据.csv

0,0
0,0

请帮我弄清楚我做错了什么。提前致谢。

注意:我的本地是 windows 10。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。