我正在尝试为管理我的应用程序的标头的类编写测试用例。它发送的标头中有http状态标头。我正在使用headers_list()来查看要发送的标头,我现在是否要发送标头。 headers_list()的问题是它不包含http状态标头(尽管这似乎在php.net上没有记录)。所以,我找不到一种方法来确定将发送什么http状态。即使我发送标题(我试图不做,所以我可以一次性测试一堆不同的东西),状态不会出现在headers_list()中。有任何想法吗?
P.S。我意识到我可以通过请求页面和检查响应来做到这一点,但这使得在单元级别保持测试非常困难,所以我试图避免它。
答案 0 :(得分: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()
方法,该方法将整个响应作为字符串返回并对其进行正则表达式,以查看它是否看起来像您期望的那样。