PHPunit文件测试

5

我是PHPUnit和TDD的新手,想知道如何测试以下代码:

class File
{
    /**
     * Write data to a given file
     * 
     * @param string $file
     * @param string $content
     * @return mixed
     */
    public function put($path, $content)
    {
        return file_put_contents($path, $content);
    }
}

如何在不实际创建文件的情况下测试文件是否已创建(使用PHPUnit)。

谢谢。

1个回答

4

您可以在单元测试中使用虚拟文件系统(例如vfsStream)来模拟文件系统。相关文档请参见此处

注:

以下是一个示例:

class FileTest extends \PHPUnit_Framework_TestCase
{
    /**
     * @var  vfsStreamDirectory
     */
    private $root;

    /**
     * set up test environmemt
     */
    public function setUp()
    {
        $this->root = vfsStream::setup('exampleDir');
    }

    /**
     * test that the file is created
     */
    public function testFileIsCreated()
    {
        $example = new File();
        $filename = 'hello.txt';
        $content = 'Hello world';
        $this->assertFalse($this->root->hasChild($filename));
        $example->put(vfsStream::url('exampleDir/' . $filename), $content);
        $this->assertTrue($this->root->hasChild($filename));
    }
}

谢谢!我一定会看一下。使用Mockery或者自己实现可以模拟文件系统吗?我很好奇文件系统是如何被模拟的。 - Melvin Koopmans
vfsStream 基本上创建了一个包装器,围绕 file:// 流,使其能够模拟所有文件系统功能。据我所知,它可以与任何测试框架(phpunit、simpletest、phpspec 等)一起使用,包括像 mockery 这样的辅助工具。 - Mark Baker
你能否给我一个示例,说明我如何在我提供的代码中使用vfsStream?如果可以的话。 - Melvin Koopmans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接