Я использую simpleTest для написания своих тестов PHP. Я пишу плагин для загрузки файлов и задавался вопросом, как я могу его тестировать.
Я хотел бы проверить, что файл правильно загружен, в правильной папке, эта ошибка корректно возвращается при необходимости и т. Д.
Как эмулировать загрузку файла (через переменную $ _FILES)? Есть ли какие-то проблемы, о которых я должен знать?
Я нашел альтернативное решение. Я подделал массив $_FILES
тестовыми данными, создал фиктивные тестовые файлы в папке tmp/
(папка не имеет значения, но я пытался придерживаться значения по умолчанию).
Проблема заключалась в том, что is_uploaded_file
и move_uploaded_file
не могли работать с этими поддельными элементами, потому что они не загружаются через POST
. Первое, что я сделал, это обернуть эти функции внутри моего собственного moveUploadedFile
и isUploadedFile
в моем плагине, чтобы я мог их isUploadedFile
и изменить их возвращаемое значение.
Последнее, что нужно было moveUploadedFile
класс при его тестировании и перезаписать moveUploadedFile
чтобы использовать rename
вместо move_uploaded_file
и isUploadedFile
для использования file_exists
вместо is_uploaded_file
.
Согласно документам, SimpleTest поддерживает тестирование FileUpload, испеченное с версии 1.0.1:
File upload testing Can simulate the input type file tag 1.0.1
Я просмотрел примеры на своем сайте и предположил, что вы будете использовать что-то в соответствии с
$this->get('http://www.example.com/'); $this->setField('filename', 'local path'); $this->click('Go');
чтобы отправить файл, а затем использовать регулярные утверждения, чтобы проверить загруженную работу по желанию. Но это действительно просто дикая догадка, так как я не знаком с SimpleTest, и я не мог найти пример на своей домашней странице. Возможно, вы захотите спросить в своем форуме поддержки.
Но в основном, не так много тестирования использования, что форма загружает файл. Это проверенное поведение браузера. Тестирование кода, который обрабатывает загрузку, имеет больше смысла. Я не знаю, как вы внедрили свой код FileUpload, но если бы мне пришлось это реализовать, я бы избавился от зависимости от массива $_FILES
как первого. Создайте класс FileRequest
который вы можете передать массив $_FILES
. Затем вы можете обрабатывать загрузку из класса. Это позволит вам протестировать функциональность без фактической загрузки файла. Просто настройте свой экземпляр FileRequest соответственно. Вы могли бы даже высмеять файловую систему с помощью vfsStreamWrapper , так что вам даже не нужны фактические файлы.
Вы можете сгенерировать загрузку файла программным способом, например, с расширением curl .
Поскольку для этого требуется PHP, работающий под веб-сервером, это не большая часть единичного теста. Следовательно, наилучшим способом было бы использовать тесты PHPT и заполнить раздел --POST_RAW--
данными.
Если вы не знаете, что положить в --POST_RAW--
, попробуйте установить расширение TamperData Firefox, выполните подачу файла из Firefox и скопируйте данные с правой стороны.
Для модульного тестирования (в отличие от функционального тестирования) попробуйте загрузить файл (короткий текстовый файл) на тестовую страницу и var_dump($_FILES)
и var_dump($_POST)
. Тогда вы знаете, что заполнить их (или ваши издевательства).