gpt4 book ai didi

php - 如何进行依赖于~真实~ POST/GET 数据的 PHPUnit 测试?

转载 作者:可可西里 更新时间:2023-11-01 12:57:12 25 4
gpt4 key购买 nike

我创建了一个包含 filter_input 函数的 PHP 类,以使我们的开发人员的工作更轻松。
要验证包含 urlnameage 字段的 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 数据。但问题在于您的代码:它不可单元测试。而不是:

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);
}

如果你有:

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

将使您的代码单元可测试,并且与您之前的代码所做的相同

附注:FILTER_VALIDATE_INTEGER 无效。正确的常量是 FILTER_VALIDATE_INT

关于php - 如何进行依赖于~真实~ POST/GET 数据的 PHPUnit 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4158307/

25 4 0
文章推荐: PHP "apc_store"和 "apc_fetch"未按预期工作
文章推荐: python - 跨
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com