2008-09-25 18 views
5

$_GET ve $_POST girişlerini PHPUnit içinde test etmenin en iyi yolu nedir?PHPUnit'teki test formu girişleri

Girdiyi temizleyen ve sahte verileri işlerken düzgün çalıştığını kontrol etmek istediğiniz bir sınıfa sahibim. PHPUnit'da form değişkenlerini ayarlamanın kolay bir yolu var mı, yoksa doğrulamayı yalnızca form değişkenlerini besleyen ikinci bir sınıfa/işlevlere aktarmam gerekiyor mu?

cevap

16

Dependency injection fikrine bir bakın. Kısaca size İşte bir örnek ... buna ihtiyacı verileri alma buna zıt olarak neye ihtiyacı kodunuzu beslemek gerekir:

örnek Bağımlılık Enjeksiyon ile Dependency Injection

function sanitize1() { 
    foreach($_POST as $k => $v) { 
    // code to sanitize $v 
    } 
} 

sanitize1(); 

örnek olmadan

function sanitize2(array &$formData) { 
    foreach($formData as $k => $v) { 
    // code to sanitize $v 
    } 
} 

sanitize2($_POST); 

Farkı görüyor musunuz? PHPUnit testinizde, sanitize2()'u istediğiniz bir ilişkisel dizi geçirebilirsiniz; bağımlılığı enjekte ettin. Oysa sanitize1(), $_POST ile birleştirilmiştir. $_POST ve $_GET yine de kod dizileridir, bu nedenle üretim kodunuzda $_GET ya da $_POST işlevinizi geçirebilirsiniz, ancak birim testlerinde bazı beklenen verileri kodlayabilirsiniz.

Birim testi örneği: bunun için

function testSanitize() { 
    $fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco'); 
    sanitize($fakeFormData); 
    // assert something 
} 
+1

teşekkürler - bu muhtemelen en iyi çözüm olduğunu düşündüm. Çok iyi cevap! –

+0

Teşekkürler phatduckk. Basit ama etkili! :) – nonshatter

İlgili konular