模拟原始POST数据

时间:2009-12-05 18:33:15

标签: php http post

我正在为Web应用程序编写PHPUnit测试用例。由于测试是在命令行环境中运行的,我正在模拟一些预定义的变量,例如 $ _ POST $ _ GET $ _ SERVER 等等。我的测试必须确保我的控制器类正确解析JSON输入(通过 php://输入以原始POST和红色发送)。问题是,如何在不运行Web服务器的情况下操纵php://输入的值?

3 个答案:

答案 0 :(得分:2)

POST数据是提供给PHP的stdin的任何东西,受CONTENT_LENGTH环境变量的影响,告诉PHP要读取多少字节(所以更改发布数据,你只需管道不同的东西)

GET数据是QUERY_STRING环境变量中的任何内容。

请参阅this了解其他环境变量,这些变量可用于设置PHP用于填充诸如$ _SERVER

之类的内容

答案 1 :(得分:0)

我会说你没有足够的分离;我看到它的方式,你应该:

  • 从php://输入获取原始数据并将该数据传递给另一个方法的一种方法
  • 接收字符串的第二种方法,并将其解析为JSON

这两种方法中的每一种都只负责一件事;这样,你就可以单位 - 测试。

在您的情况下,您可以对第二种方法(实际完成工作的方法)的行为进行单元测试 - 而不依赖于输入的来源。

答案 2 :(得分:0)

如果将读取功能移到类(或者如果你使用的是PHP 5.3,那么将其移动到闭包中),然后在测试时将其替换为模拟实例呢?