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
và $_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
}
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! –
Cảm ơn phatduckk. Đơn giản mà hiệu quả! :) – nonshatter