Ввод тестовых форм в PHPUnit

Каков наилучший способ тестирования входов $_GET и $_POST в PHPUnit ?

У меня есть класс, который санирует вход и хочет проверить, что он работает правильно при обработке фиктивных данных. Есть ли простой способ настроить переменные формы в PHPUnit или я должен просто передать проверку на вторичный класс / функции, которые кормят переменными формы, поэтому проверяйте их косвенно?

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

пример без инъекции зависимостей

 function sanitize1() { foreach($_POST as $k => $v) { // code to sanitize $v } } sanitize1(); 

пример с инъекцией зависимостей

 function sanitize2(array &$formData) { foreach($formData as $k => $v) { // code to sanitize $v } } sanitize2($_POST); 

Увидеть разницу? В вашем тесте PHPUnit вы можете передать sanitize2() ассоциативный массив по вашему выбору; вы ввели зависимость. В то время как sanitize1() сочетается с $_POST . $_POST и $_GET являются массивами-связями, поэтому в вашем производственном коде вы можете передать $_GET или $_POST для своей функции, но в ваших модульных тестах вы будете жестко кодировать некоторые ожидаемые данные.

Пример тестового блока:

 function testSanitize() { $fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco'); sanitize($fakeFormData); // assert something }