Тестирование ввода формы в PHPUnit

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

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

Ответы на вопрос(1)

Решение Вопроса

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

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

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
}
 nonshatter06 июл. 2012 г., 14:40
Спасибо phatduckk. Простой, но эффективный! :)
 Colonel Sponsz26 сент. 2008 г., 15:44
Спасибо за это - я подумал, что это, вероятно, лучшее решение. Очень хороший ответ тоже!

Ваш ответ на вопрос