Модульное тестирование - анализ файла конфигурации yaml с помощью file_get_contents и синтаксического анализатора yaml symfony
Я хочу загрузить содержимое файла конфигурации yaml. С помощью парсера Symfony Yaml, и согласно их документации, у меня есть parse()
метод работает так:
public function parse($filePath)
{
$fileAsString = file_get_contents($filePath);
if (false === $fileAsString) {
throw new \Exception('Failed to get content of config file.');
}
return $this->parser->parse($fileAsString);
}
При тестировании этого метода с виртуальной файловой системой vfsStream я заметил, что file_get_contents()
не только возвращает false в случае сбоя, но также выдает то, что выглядит как ошибка:
public function parse_throws_Exception_for_invalid_filePath()
{
// Setup a root directory
$root = vfsStream::setup();
// Set a path of a non existing file
$filePath = $root->url() . '/file';
// Create a config mock
$configMock = $this->getMockBuilder('Microblog\Config')
->disableOriginalConstructor()
->setMethods(null)
->getMock();
$configMock->parse($filePath);
}
Я также заметил, что для большей parse
метод должен также учитывать случай недействительного файла yaml, который привел меня к этому изменению в parse
метод:
public function parse($filePath)
{
try {
return $this->parser->parse(file_get_contents($filePath));
}
catch (\Exception $e) {
// Catch exception from file_get_contents and yaml parser
throw new \Exception('Failed to get config file ("'. $e->getMessage() . '").');
}
catch (Symfony\Component\Yaml\Exception\ParseException $e) {
// Catch exception from file_get_contents and yaml parser
throw new \Exception('Failed to parse config file ("'. $e->getMessage() . '").');
}
}
Но это, похоже, не ловит ни одно из исключений...:(
Я также прочитал, что хорошая альтернатива file_get_contents()
является cURL
но файл конфигурации является файлом в той же файловой системе, cURL
на самом деле не то, что мне нужно. Есть идеи?