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