Testando entradas de formulário em PHPUnit
-
02-07-2019 - |
Pergunta
Qual é a melhor maneira de entradas $_GET
teste e $_POST
em PHPUnit
?
Eu tenho uma classe que a entrada higieniza e quiser verificar que ele funciona corretamente quando o processamento de dados falsos. Existe uma maneira fácil de configurar as variáveis ??de formulário em PHPUnit
ou devo apenas passar a validação a uma classe secundária / funções que são alimentados as variáveis ??de formulário para testá-los indiretamente?
Solução
Dê uma olhada na idéia de Injeção de dependência . Em poucas palavras você deve alimentar o seu código o que ele precisa em oposição a ele obter os dados de que necessita ... Aqui está um exemplo:
exemplo, sem Dependency Injection
function sanitize1() {
foreach($_POST as $k => $v) {
// code to sanitize $v
}
}
sanitize1();
exemplo, com Dependency Injection
function sanitize2(array &$formData) {
foreach($formData as $k => $v) {
// code to sanitize $v
}
}
sanitize2($_POST);
Veja a diferença? Em seu teste PHPUnit você pode passar sanitize2()
uma matriz associativa de sua escolha; Você injetou a dependência. Considerando sanitize1()
é acoplado com $_POST
. $_POST
e $_GET
são matrizes assoc de qualquer maneira assim em seu código de produção você pode passar $_GET
ou $_POST
à sua função, mas em seus testes de unidade você iria codificar alguns dados esperados.
exemplo de teste Unidade:
function testSanitize() {
$fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco');
sanitize($fakeFormData);
// assert something
}