我创建了一个包含filter_input函数的
PHP类,以使我们的开发人员的生活更轻松.
要使用url,name和age字段验证HTML表单,代码将是这样的:
要使用url,name和age字段验证HTML表单,代码将是这样的:
$post = Filter::POST(); if ($post->validate_string('name') && $post->validate_integer('age')) { $url = $post->sanitize_url('url'); }
它将是相同的:
if (filter_input(INPUT_POST,'name',FILTER_UNSAFE_RAW) && filter_input(INPUT_POST,'age',FILTER_VALIDATE_INTEGER)) { $url = filter_input(INPUT_POST,'url',FILTER_SANITIZE_URL); }
好吧,我认为代码已经完成,现在我想为它创建一个PHPUnit测试.
问题是我不知道如何伪造PHPUnit方法上的GET / POST数据,而不是这种情况.
我不需要在$_POST中插入值,我需要“真实”数据,因为filter_input可以处理脚本收到的数据,而不是实际的$_POST超全局数据.
我尝试使用以下PHPT测试和PHPUnit方法来实现这一点,但根本没有成功:
--TEST-- Generates POST and GET data to be used in FilterTest.PHP --POST-- name=Igor&age=20 --GET-- name=Igor&age=19 --FILE-- <?PHP echo $_POST['nome'].' = '.$_POST['idade']; ?> --EXPECT-- Igor = 20
public function testPHPt() { $PHPt = new PHPUnit_Extensions_PHPtTestCase('FilterTest_data.PHPt',array('cgi' => 'php-cgi')); $result = $PHPt->run(); $this->assertTrue($result->wasSuccessful()); }
编辑
原始代码:http://pastebin.com/fpw2fpxM
用于初始测试的代码:http://pastebin.com/vzxsBQWm
(对不起葡萄牙语,我知道用英语编码会更好,但这就是我工作的地方.如果你真的认为它真的需要,我可以翻译代码).
我有什么想法来测试这个课程吗?
你不能伪造原始的POST数据.但问题在于你的代码:它不是单元可测试的.代替:
原文链接:https://www.f2er.com/javaschema/281495.htmlif (filter_input(INPUT_POST,FILTER_SANITIZE_URL); }
如果你有:
if (filter_var($data['name'],FILTER_UNSAFE_RAW) && filter_var($data['age'],FILTER_VALIDATE_INT)) { $url = filter_var($data['url'],FILTER_SANITIZE_URL); } // where $data is a copy of $_POST in that case
P.S.:FILTER_VALIDATE_INTEGER无效.适当的常量是FILTER_VALIDATE_INT