如何在PHPUnit中测试STDIN

如何在PHPUnit中测试STDIN

问题描述:

我有从stdin读取并返回相关值的读取器类。如何在PHPUnit中测试STDIN

class Reader 
{ 
    const STREAM_READ = 'php://stdin'; 

    private $_streamHandle; 

    public function __construct($stream = self::STREAM_READ) 
    { 
     $this->_streamHandle = fopen($stream, 'r'); 
    } 

    public function getReadedValue() 
    { 
     $value = trim(fgets($this->_streamHandle)); 

     return $value; 
    } 

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

现在是我的问题,我怎么能测试这个类,从标准输入读的东西和getReadedValue()函数返回值readed?

+0

使用命令行执行脚本 – 2013-04-11 19:47:53

+0

PHPUnit有一个名为vfsStream的文件系统模拟扩展,我认为这可能会有所帮助,但文档不会说什么,所以也许不会。也许值得一挖虽然?它在GitHub上。或者,下面是一个相关的QA,可能值得一读:http://*.com/questions/9158155/how-to-write-unit-tests-for-interactive-console-app – 2013-04-11 19:55:39

您测试阅读器,而不是如果STDIN正在工作或没有。

因为您测试的单位(读者)什么文件名是什么并不重要,因为它只是可选的。您可以注入不同的东西,例如临时文件的文件名。

+0

好点,任何想法如何测试STDIN是默认流? – nickel715 2016-03-24 15:33:35