Тестирование ввода формы в PHPUnit
-
02-07-2019 - |
Вопрос
Как лучше всего протестировать $_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
}