2008-09-25 28 views
5

Cách tốt nhất để kiểm tra các đầu vào $_GET$_POST là gì trong PHPUnit?Đầu vào biểu mẫu thử nghiệm trong PHPUnit

Tôi có một lớp học làm sạch đầu vào và muốn kiểm tra xem nó có hoạt động chính xác khi xử lý dữ liệu không có thật không. Có một cách dễ dàng để thiết lập các biến hình thức trong PHPUnit hoặc tôi chỉ nên vượt qua xác nhận đến một lớp trung học/chức năng được cho ăn các biến hình thức để kiểm tra chúng gián tiếp?

Trả lời

16

Hãy xem ý tưởng của Dependency injection. Tóm lại, bạn nên ăn mã của bạn những gì nó cần như trái ngược với nó nhận được dữ liệu cần thiết ... Dưới đây là một ví dụ:

dụ mà không Dependency Injection

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

sanitize1(); 

ví dụ với Dependency Injection

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

sanitize2($_POST); 

Xem sự khác biệt? Trong thử nghiệm PHPUnit của bạn, bạn có thể vượt qua sanitize2() một mảng kết hợp mà bạn chọn; bạn đã tiêm vào sự phụ thuộc. Trong khi đó, sanitize1() được kết hợp với $_POST. $_POST$_GET là các mảng assoc anyways như vậy trong mã sản xuất của bạn, bạn có thể vượt qua $_GET hoặc $_POST để chức năng của bạn, nhưng trong bài kiểm tra đơn vị của bạn, bạn khó mã số dữ liệu dự kiến.

Đơn vị kiểm tra ví dụ:

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

Cảm ơn cho điều đó - tôi đoán rằng có lẽ là giải pháp tốt nhất. Câu trả lời rất hay! –

+0

Cảm ơn phatduckk. Đơn giản mà hiệu quả! :) – nonshatter

Các vấn đề liên quan