3

アプリケーションのヘッダーを管理しているクラスのテストケースを作成しようとしています。送信するヘッダーには、httpステータスヘッダーがあります。私はheaders_list()を使用して、どのヘッダーが送信されるかを確認しています。今すぐヘッダーを送信しますか。headers_list()の問題は、httpステータスヘッダーが含まれていないことです(ただし、これはphp.netで文書化されていないようです)。そのため、送信されるhttpステータスを判別する方法が見つかりません。ヘッダーを送信しても(送信しないようにしているので、さまざまなことを一度にテストできます)、ステータスはheaders_list()に表示されません。何か案は?

PSページをリクエストして応答を調べることでこれを行うことができると思いますが、それではユニットレベルでのテストを維持することが非常に困難になるため、回避しようとしています。

4

1 に答える 1

0

ヘッダーを返すが送信しないモックを使用するか、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 に答える