3

我正在尝试为管理我的应用程序标头的类编写测试用例。它发送的标头中有 http 状态标头。我正在使用 headers_list() 来查看将发送哪些标题,我现在是否要发送标题。headers_list() 的问题在于它不包含 http 状态标头(尽管这似乎在 php.net 上没有记录)。所以,我找不到一种方法来确定将发送什么 http 状态。即使我确实发送了标题(我试图不这样做,所以我可以一次测试一堆不同的东西),状态不会显示在 headers_list() 中。有任何想法吗?

PS我意识到我可以通过请求页面并检查响应来做到这一点,但这使得将测试保持在单元级别非常困难,所以我试图避免它。

4

1 回答 1

0

使用返回标头但不发送标头的Mock或编写 Response 对象,例如

class HttpResponse 
{
    protected $_status = '200 OK';
    protected $_headers = array();
    protected $_body = null;

    public function setStatus($status)
    {
        $this->_status = $status;
    }

    public function getStatus()
    {
        return $this->_status;
    }

    public function addHeader($name, $value)
    {
        $this->_headers[$name] = $value;
        return $this;
    }

    public function getHeaders()
    {
        return $this->_headers;
    }    

    public function write($data)
    {
        $this->_body .= $data;
        return $this;
    }

    public function send()
    {
        header('HTTP/1.0 ' . $this->_status);
        foreach ($this->headers as $name => $value) {
            header("$name : $value");
        }
        echo $this->_body;
        $this->resetRequest();
    }

   public function resetRequest()
   {
        $this->_status  = '200 OK';
        $this->_headers = array();
        $this->_body    = null;
   }
}

因此,只要您不这样做,send()您就可以通过吸气剂检查状态。您还可以添加一个__toString()方法,将整个响应作为字符串返回并对其进行正则表达式,以查看它是否看起来像您期望的那样。

于 2009-11-25T19:12:47.587 回答