使用Simpletest进行单元测试的问题

时间:2011-03-17 10:42:39

标签: php simpletest unit-testing

我使用PHP和simpletest进行单元测试。我的测试工作正常,直到我尝试设置cookie

try{
    setcookie($name,$cookie,$cookie_expires );
}catch Exception($e){
  blah
}

抛出异常是因为simpletest已经写出了标题信息,所以我得到以下内容:

  

意外的PHP错误[无法修改标题信息 - 已经发送的标题(在/tests/simpletest/reporter.php:43开始输出)] [blah_code.php第280行]中的严重性[E_WARNING]

我已经看到了使用$this->expectException(new Exception());来解决此问题的模糊解释,但没有其他文档或示例可行。有人可以提供一个工作示例或指向我的文档吗?要清楚。这不是我生成输出的代码,而是SimpleTest。

2 个答案:

答案 0 :(得分:1)

如果您之前有输出(header函数)setcookie($name,$cookie,$cookie_expires );,则会出现此错误。

确保在echos之前没有任何htmltext<?php或任何内容(通过空间setcookie($name,$cookie,$cookie_expires );

答案 1 :(得分:1)

解决这个问题的一种方法是使用输出缓冲。

您可以在PHP的配置中全局启用它(可能在.htaccess中),或者您可以使用ob_start()及其相关功能(ob_get_clean()ob_end_flush()等)。例如:

ob_start();
// your SimpleTest here.
// your header/ cookie manipulation here.

然后:

ob_end_clean(); // Stop buffering and dump everything (don't echo).
ob_end_flush(); // Stop buffering and echo out the buffer.
ob_get_clean(); // Stop buffering and return everything as a string.

或任何其他相关功能。我相信如果不这样做,PHP会在文件末尾调用ob_flush()