В один проект, который я нашел такие строки кода:PHPUnit испытаний для цепи Еореп/FWRITE
protected function save($content, $path)
{
// ...
if (($handler = @fopen($path, 'w')) === false) {
throw new Exception('...');
}
// ...
if (@fwrite($handler, $content) === false) {
throw new Exception('...');
}
// ...
@fclose($handler);
}
Я хотел бы проверить этот метод с PHPUnit, но я немного застрял с правильной Test- дело. Если я переведу неправильный $path
или правильный $path
с неправильными разрешениями (например, 0444
), то все будет остановлено при первом исключении. Если я правильно передаю $path
с правильными разрешениями, то PHP также сможет записать в файл, а второе исключение не будет достигнуто.
Итак, есть ли способ проверить второе исключение без перезаписи этого метода?
Или лучше проверить как fopen
, так и fwrite
в одном состоянии и использовать только одно исключение для обоих?
Или лучший вариант состоит в том, чтобы разделить этот метод на два - один для открытия и один для записи - и проверить их отдельно?
Я хотел бы использовать высмеивал $ путь, см. https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.mocking-the-filesystem - с помощью vfsStream вы можете установить квоту виртуального диска, которая должна (несмотря на сбои hw) - самая распространенная причина, по которой fwrite возвращает false. vfsStream :: setQuota() - метод выбора. –
@ l-x ваш комментарий должен быть ответом :) –
Да, и я мог определенно принять его :) Хороший пакет для тестирования. –