PHPUnit - протестируйте контроллер MVC с $ _POST переменная

Я запускаю работу с PHPUnit с Kohana. Мое приложение имеет много контроллеров, который просто берет данные из некоторой формы, проверяет и вставляет/обновляет/удаляет into/-/from базу данных. Как я должен записать тестовые сценарии для этого.

Я знаю, что, если я хочу протестировать функцию, я пишу, что поставщик данных функционирует и просто сравнивает возвращенное значение с ожидаемым. Но мои входные данные (данные из форм) передаются в $_POST переменная. Как я должен протестировать это? И после этого, я должен проверить, находятся ли вставленные данные действительно в базе данных? Дайте мои некоторые инструкции для того типа тестов или ссылок на некоторые примеры/учебные руководства.Спасибо.

7
задан Pascal MARTIN 20 December 2009 в 11:25
поделиться

2 ответа

Во-первых, если вы тестируете весь путь от получения POSTed данных до проверки значений в БД, то это уже не юнит-тестирование: вы не тестируете один компонент в отрыве от других, а тестируете интеграцию этих компонентов вместе.

Это усложняет тестирование :

  • вы должны предоставлять данные более сложными способами : не только как параметры метода, но и как параметры всего вашего приложения (что означает подделку POST-данных, здесь, например)
  • у вас есть больше вещей для проверки : не только возвращаемое значение метода, или если он бросил исключение
  • у вас есть несколько разных и, возможно, несвязанных вещей, которые могут вызвать сбой (проблема в каком-то PHP-коде, проблема в базе данных, недоступность сервера базы данных, ...). ...), что затруднит поиск причины сбоев.


Обратите внимание, что я не говорил, что такие тесты "интеграции" не полезны, btw ;-)


Тем не менее, подделка массива $_POST довольно проста: он не доступен только для чтения, и вы можете хранить в нем все, что захотите.

Итак, в начале вашего тестового случая, ничто не мешает вам вводить в него необходимые данные.

.
16
ответ дан 6 December 2019 в 10:50
поделиться

Что сказал Паскаль. Также обратите внимание, что существуют инструменты специально для тестирования взаимодействия на уровне http / браузера. Вы можете использовать веб-тесты SimpleTest (использует эмулируемый браузер или браузер с поддержкой сценариев). Если вы предпочитаете PhpUnit, я думаю, вы можете довольно легко использовать браузер SimpleTest из PhpUnit. В противном случае есть более тяжелая Selenium IDE, для которой PhpUnit имеет интеграцию.

2
ответ дан 6 December 2019 в 10:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: