Модульное тестирование PHP и макетирование файловой системы scandir()
У меня есть метод в классе, который сканирует каталог и создает массив всех подкаталогов. Это довольно просто и прекрасно работает. Тем не менее, я хотел бы добавить модульный тест для этого метода, и мне трудно разобраться, как.
Вот моя проблема: я могу создать виртуальную файловую систему, используя 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);
}
1 ответ
Извините, если я неправильно понял ваш вопрос, но 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"
}