Если Ваш абстрактный класс будет содержать конкретную функциональность, которая имеет бизнес-возможность, то я буду обычно тестировать его непосредственно путем создания теста дважды, который гасит абстрактные данные, или при помощи платформы насмешки, чтобы сделать это для меня. Какой, который я выбираю, во многом зависит от того, нужно ли мне к определенным для теста записи реализациям абстрактных методов или нет.
наиболее распространенный сценарий, в котором я должен сделать это, - когда я использую Шаблонный шаблон Метода , такой как тогда, когда я создаю своего рода расширяемую платформу, которая будет использоваться третьей стороной. В этом случае абстрактный класс - то, что определяет алгоритм, который я хочу протестировать, таким образом, имеет больше смысла тестировать абстрактную основу, чем определенная реализация.
Однако я думаю, что важно, чтобы эти тесты сфокусировались на конкретные реализации реальной бизнес-логики [только 115]; Вы не были должны модульный тест детали реализации из абстрактного класса, потому что Вы закончите с хрупкими тестами.
Я предполагаю, что Apache работает как другой пользователь / группа, чем пользователь / группа, владеющая файлом. В этом случае сам файл должен быть 0777
.
public
должен быть 0777
только в том случае, если вы планируете добавлять файлы в папку с помощью PHP. Даже если сама папка не 0777
, если файл есть и в папке есть не менее 5
для пользователя ( чтение / выполнение
), вы должны быть возможность записи в файл.
В конечном итоге ваше файловое дерево должно выглядеть так:
public_html
public
file.txt 0777
Естественно, вы выиграли ' нельзя изменить эти разрешения с помощью PHP, но вы можете сделать это с помощью FTP-клиента.
Если он по-прежнему не работает, возможно, PHP работает в безопасном режиме или вы можете использовать такое расширение, как PHP Suhosin. Вы можете получить лучший результат, изменив владельца файла на того же пользователя / группу, которая запускает скрипт.
Чтобы получить идентификатор пользователя / группы исполняющего пользователя, вы можете использовать следующее:
<?php
echo getmyuid().':'.getmygid(); //ex:. 0:0
?>
Затем вы можно использовать chown
(в терминале), чтобы изменить владельца файла:
> chown 0:0 file.txt
Вы должны изменить файл chmod сразу после его создания.
function Doo_Chmod($path, $chmod = null)
{
if (file_exists($path) === true)
{
if (is_null($chmod) === true)
{
$chmod = (is_file($path) === true) ? 644 : 755;
if (in_array(get_current_user(), array('apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true)
{
$chmod += 22;
}
}
return chmod($path, octdec(intval($chmod)));
}
return false;
}