Параметры POST для теста PHPUnit

Я новичок в тестировании, я использую PHPUnit для написания теста. Весь сайт был разработан с использованием шаблона MVC.

Я хотел бы протестировать каждый метод на своих контроллерах, проблема в том, что такие методы получают параметры через переменную $_POST. Как я могу перезаписать эту переменную?

Заранее спасибо Алехандра


person Alejandra    schedule 27.04.2010    source источник


Ответы (3)


Лучшим подходом было бы абстрагировать запрос в отдельный класс и вообще не обращаться к суперглобальным переменным. Таким образом, вы отделяете фактический сервер и среду запроса от приложения. Затем вы можете легко издеваться над запросом.

person Gordon    schedule 27.04.2010
comment
Но есть необходимость протестировать этот запрос отдельным классом. Как лучше всего это сделать? - person Viktor Todorov; 13.09.2014
comment
@ViktorTodorov с модульным тестом. И если вы хотите протестировать его на нескольких SAPI: с помощью интеграционного теста - person Gordon; 13.09.2014

Во-первых, если вы используете Zend_Test, используйте

$this->request->setMethod('POST')->setPost(array(insert array info here));

Если вы не используете это, попробуйте следующее:

Предупреждение: не лучшее решение, но оно сработает!

Поместите это в свой прибор setUp

 protected function setUp()
    {
        parent::setUp();
        $_POST = array();
    }

Затем, прежде чем вы вызовете свой тест, просто сделайте что-то похожее на это:

$_POST = array(insert array data here)
person Enrique    schedule 27.04.2010
comment
Первая часть этого ответа была ОЧЕНЬ полезной. Спасибо. - person Michael Kopinsky; 10.04.2011
comment
Даже вторая часть помогла мне с TYPO3 и модульными тестами. - person András Ottó; 02.05.2016

Даже если некоторые скажут, что это не чисто, вы можете установить данные в $_POST перед вызовом ваших методов: они не только для чтения ;-)

person Pascal MARTIN    schedule 27.04.2010