【问题标题】:Problems Unit Testing with Simpletest使用 Simpletest 进行单元测试的问题
【发布时间】:2011-07-17 07:30:56
【问题描述】:

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

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

抛出异常是因为simpletest已经写出了头信息所以我得到以下信息:

意外的 PHP 错误 [无法修改标头信息 - 标头已由(输出开始于 /tests/simpletest/reporter.php:43)] 严重性 [E_WARNING] in [blah_code.php line 280]

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

【问题讨论】:

    标签: php simpletest unit-testing


    【解决方案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()

    【讨论】:

    • 这里有类似的问题...只是在文件的开头添加 ob_start() 不会改变任何东西。
    【解决方案2】:

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

    确保在<?phpsetcookie($name,$cookie,$cookie_expires ); 之前没有任何echoshtmltext 或任何东西(甚至不是空格)。

    【讨论】:

    • 创建输出而不是我的代码的简单测试。这就是我在这里提出这个问题的原因。
    • @Jim 很抱歉我严重误解了你的问题。
    • @Jim 我想你在输出任何东西之前已经使用了这个simpletest
    猜你喜欢
    • 2010-12-16
    • 2013-10-30
    • 2012-01-31
    • 2011-04-01
    • 2015-04-11
    • 2020-07-28
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多