【问题标题】:Mocking raw POST data模拟原始 POST 数据
【发布时间】:2009-12-05 18:33:15
【问题描述】:

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

【问题讨论】:

    标签: php http post


    【解决方案1】:

    POST 数据是输入到 PHP 的标准输入的任何内容,取决于 CONTENT_LENGTH 环境变量告诉 PHP 要读取多少字节(因此要更改发布数据,您只需输入不同的管道)

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

    请参阅this 了解其他可用于设置的环境变量,PHP 使用这些环境变量来填充诸如 $_SERVER 之类的内容

    【讨论】:

      【解决方案2】:

      我会说你没有足够的分离关注点;在我看来,你应该有:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2012-11-27
          • 1970-01-01
          • 2019-02-20
          • 2016-03-26
          • 1970-01-01
          • 1970-01-01
          • 2013-07-26
          • 2015-01-02
          • 2017-12-06
          相关资源
          最近更新 更多