2008-09-25 91 views
5

PHPUnit中測試$_GET$_POST輸入的最佳方式是什麼?在PHPUnit中測試表單輸入

我有一個類來清理輸入,並希望檢查它在處理僞造數據時是否正常工作。有沒有簡單的方法來設置PHPUnit中的表單變量,或者我應該將驗證傳遞給輔助類/提供表單變量的函數,以便間接測試它們?

回答

16

看看Dependency injection的想法。概括地說,你應該養活你的代碼,它需要什麼,而不是它得到它所需要的數據......下面是一個例子:

例如,而不依賴注入與依賴注入

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 
} 
+1

感謝您的 - 我想這可能是最好的解決方案。非常好的答案! – 2008-09-26 13:44:30