Тестирование ввода формы в PHPUnit - PullRequest
5 голосов
/ 25 сентября 2008

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

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

1 Ответ

16 голосов
/ 26 сентября 2008

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

пример без внедрения зависимостей

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...