1

我在一个类中有一个方法可以扫描一个目录并创建一个包含所有子目录的数组。这很简单,而且效果很好。但是,我想为此方法添加一个单元测试,但我很难弄清楚如何做。

这是我的问题:我可以使用 vfsstream 创建一个虚拟文件系统,它工作正常。但是,我不能将它传递给我的班级来创建一个数组。它需要一个真实的目录来扫描。我想针对受控目录进行测试(显然,我确切地知道每次扫描的结果是什么,以便我可以测试它)。生产中的扫描目录可能会经常更改。

所以,我唯一的解决方案是在我的测试文件夹中创建一个特定于测试的假目录,将该路径传递给我的扫描仪,然后根据我知道的那个假目录中的内容检查它。这是最佳实践还是我错过了什么?

谢谢!

这是一些代码:测试

function testPopulateAuto() 
{ 
    $c = new \Director\Core\Components\Components; 

    // The structure of the file system I am checking against. This is what I want to generate. 
    $check = array( 
        'TestFolder1', 
        'TestFolder2', 
    );     

    $path = dirname( __FILE__ ) . "/test-file-system/"; // Contains TestFolder1 and TestFolder1 
    $list = $c->generateList( $path ); // Scans the path and returns an array that should be identical to $check 

    $this->assertEquals($check, $list); 
}  
4

1 回答 1

2

抱歉,如果我误解了您的问题,但scandir应该使用自定义流。例子:

$structure = array(
        'tmp' => array(
                'music' => array(
                        'wawfiles' => array(
                                'mp3'                      => array(),
                                'hello world.waw'          => 'nice song',
                                'abc.waw'                  => 'bad song',
                                'put that cookie down.waw' => 'best song ever',
                                "zed's dead baby.waw"      => 'another cool song'
                        )
                )
        )
);
$vfs = vfsStream::setup('root');
vfsStream::create($structure, $vfs);

$music = vfsStream::url('root/tmp/music/wawfiles');

var_dump(scandir($music));

输出:

array(5) {
  [0]=>
  string(7) "abc.waw"
  [1]=>
  string(15) "hello world.waw"
  [2]=>
  string(3) "mp3"
  [3]=>
  string(24) "put that cookie down.waw"
  [4]=>
  string(19) "zed's dead baby.waw"
}
于 2014-03-27T23:24:28.573 回答