在PHPUnit中测试表单输入
时间:2020-03-06 14:42:43 来源:igfitidea点击:
在PHPUnit中测试$ _GET和$ _POST输入的最佳方法是什么?
我有一个可以清除输入内容的类,并希望在处理虚假数据时检查其是否正常工作。有没有一种简单的方法可以在PHPUnit中设置表单变量,还是应该将验证传递给辅助变量/类,以便对它们进行间接测试?
解决方案
看看依赖注入的想法。简而言之,我们应该向代码提供所需的内容,而不是获取所需的数据……这是一个示例:
没有依赖注入的示例
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都是assoc数组,因此在生产代码中我们可以将$ _GET或者$ _POST传递给函数,但是在单元测试中,我们将对某些预期数据进行硬编码。
单元测试示例:
function testSanitize() { $fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco'); sanitize($fakeFormData); // assert something }