Вопрос

Как лучше всего протестировать $_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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top