5
在PHPUnit
中测试$_GET
和$_POST
输入的最佳方式是什么?在PHPUnit中测试表单输入
我有一个类来清理输入,并希望检查它在处理伪造数据时是否正常工作。有没有简单的方法来设置PHPUnit
中的表单变量,或者我应该将验证传递给辅助类/提供表单变量的函数,以便间接测试它们?
在PHPUnit
中测试$_GET
和$_POST
输入的最佳方式是什么?在PHPUnit中测试表单输入
我有一个类来清理输入,并希望检查它在处理伪造数据时是否正常工作。有没有简单的方法来设置PHPUnit
中的表单变量,或者我应该将验证传递给辅助类/提供表单变量的函数,以便间接测试它们?
看看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
}
感谢您的 - 我想这可能是最好的解决方案。非常好的答案! – 2008-09-26 13:44:30