Test degli input del modulo in PHPUnit
-
02-07-2019 - |
Domanda
Qual è il modo migliore per testare gli input $ _GET
e $ _POST
in PHPUnit
?
Ho una classe che disinfetta l'input e voglio verificare che funzioni correttamente durante l'elaborazione di dati fasulli. Esiste un modo semplice per impostare le variabili del modulo in PHPUnit
o devo semplicemente passare la convalida a una classe / funzioni secondarie che vengono alimentate con le variabili del modulo in modo da testarle indirettamente?
Soluzione
Dai un'occhiata all'idea di Iniezione di dipendenza . In poche parole dovresti alimentare il tuo codice di cosa ha bisogno invece di ottenere i dati di cui ha bisogno ... Ecco un esempio:
esempio senza iniezione di dipendenza
function sanitize1() {
foreach( Dai un'occhiata all'idea di Iniezione di dipendenza . In poche parole dovresti alimentare il tuo codice di cosa ha bisogno invece di ottenere i dati di cui ha bisogno ... Ecco un esempio:
esempio senza iniezione di dipendenza
function sanitize2(array &$formData) {
foreach($formData as $k => $v) {
// code to sanitize $v
}
}
sanitize2( Dai un'occhiata all'idea di Iniezione di dipendenza . In poche parole dovresti alimentare il tuo codice di cosa ha bisogno invece di ottenere i dati di cui ha bisogno ... Ecco un esempio:
esempio senza iniezione di dipendenza
function sanitize1() {
foreach( Dai un'occhiata all'idea di Iniezione di dipendenza . In poche parole dovresti alimentare il tuo codice di cosa ha bisogno invece di ottenere i dati di cui ha bisogno ... Ecco un esempio:
esempio senza iniezione di dipendenza
function testSanitize() {
$fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco');
sanitize($fakeFormData);
// assert something
}
esempio con Iniezione delle dipendenze
<*>
Vedi la differenza? Nel test PHPUnit puoi passare sanitize2 ()
a un array associativo di tua scelta; hai iniettato la dipendenza. Considerando che sanitize1 ()
è abbinato a $ _POST
. $ _POST
e $ _GET
sono comunque matrici associate, quindi nel tuo codice di produzione puoi passare $ _GET
o $ _POST
alla tua funzione, ma nei test delle unità avresti codificato alcuni dati previsti.
Esempio di unit test:
<*>POST as $k => $v) {
// code to sanitize $v
}
}
sanitize1();
esempio con Iniezione delle dipendenze
<*>
Vedi la differenza? Nel test PHPUnit puoi passare sanitize2 ()
a un array associativo di tua scelta; hai iniettato la dipendenza. Considerando che sanitize1 ()
è abbinato a $ _POST
. $ _POST
e $ _GET
sono comunque matrici associate, quindi nel tuo codice di produzione puoi passare $ _GET
o $ _POST
alla tua funzione, ma nei test delle unità avresti codificato alcuni dati previsti.
Esempio di unit test:
<*>POST);
esempio con Iniezione delle dipendenze
<*>
Vedi la differenza? Nel test PHPUnit puoi passare sanitize2 ()
a un array associativo di tua scelta; hai iniettato la dipendenza. Considerando che sanitize1 ()
è abbinato a $ _POST
. $ _POST
e $ _GET
sono comunque matrici associate, quindi nel tuo codice di produzione puoi passare $ _GET
o $ _POST
alla tua funzione, ma nei test delle unità avresti codificato alcuni dati previsti.
Esempio di unit test:
<*>POST as $k => $v) {
// code to sanitize $v
}
}
sanitize1();
esempio con Iniezione delle dipendenze
<*> Vedi la differenza? Nel test PHPUnit puoi passare sanitize2 ()
a un array associativo di tua scelta; hai iniettato la dipendenza. Considerando che sanitize1 ()
è abbinato a $ _POST
. $ _POST
e $ _GET
sono comunque matrici associate, quindi nel tuo codice di produzione puoi passare $ _GET
o $ _POST
alla tua funzione, ma nei test delle unità avresti codificato alcuni dati previsti.
Esempio di unit test:
<*>