我正在为Web应用程序编写PHPUnit测试用例。由于测试是在命令行环境中运行的,我正在模拟一些预定义的变量,例如 $ _ POST , $ _ GET , $ _ SERVER 等等。我的测试必须确保我的控制器类正确解析JSON输入(通过 php://输入以原始POST和红色发送)。问题是,如何在不运行Web服务器的情况下操纵php://输入的值?
答案 0 :(得分:2)
POST数据是提供给PHP的stdin的任何东西,受CONTENT_LENGTH环境变量的影响,告诉PHP要读取多少字节(所以更改发布数据,你只需管道不同的东西)
GET数据是QUERY_STRING环境变量中的任何内容。
请参阅this了解其他环境变量,这些变量可用于设置PHP用于填充诸如$ _SERVER
之类的内容答案 1 :(得分:0)
我会说你没有足够的分离;我看到它的方式,你应该:
这两种方法中的每一种都只负责一件事;这样,你就可以单位 - 测试。
在您的情况下,您可以对第二种方法(实际完成工作的方法)的行为进行单元测试 - 而不依赖于输入的来源。
答案 2 :(得分:0)
如果将读取功能移到类(或者如果你使用的是PHP 5.3,那么将其移动到闭包中),然后在测试时将其替换为模拟实例呢?