2009-12-05 102 views
1

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

回答

0

我会说你没有足够的关注;我看到它的样子,你应该有:

  • 一个方法,从PHP获取原始数据://输入并传送数据到另一个方法
  • 接收一个字符串,并解析它作为第二个方法JSON

这两种方法的每一种都是唯一的一件事;这样,你可以单元-测试。

就你而言,你可以单元测试第二种方法(实际完成工作的方法)的行为 - 而不依赖于输入来自哪里。

0

如何将阅读功能移动到一个类(甚至如果你使用PHP 5.3),然后在测试时用模拟实例替换它?

2

POST数据,无论是输送到PHP的标准输入,受CONTENT_LENGTH环境变量告诉PHP如何读取的字节数(所以改后的数据,你只需管在不同的东西)

GET数据是什么位于QUERY_STRING环境变量中。

其他环境变量可以设置由PHP用于填充之类的东西$ _ SERVER

有用见 this