Модульное тестирование - анализ файла конфигурации 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 на самом деле не то, что мне нужно. Есть идеи?

0 ответов

Другие вопросы по тегам