Каков наилучший способ тестирования входов $_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 }