【发布时间】:2012-04-02 10:58:36
【问题描述】:
我正在尝试使用 PHPunit 来测试一个输出一些自定义标头的类。
问题是在我的机器上是这样的:
<?php
class HeadersTest extends PHPUnit_Framework_TestCase {
public function testHeaders()
{
ob_start();
header('Location: foo');
$headers_list = headers_list();
header_remove();
ob_clean();
$this->assertContains('Location: foo', $headers_list);
}
}
甚至这个:
<?php
class HeadersTest extends PHPUnit_Framework_TestCase {
public function testHeaders()
{
ob_start();
header('Location: foo');
header_remove();
ob_clean();
}
}
返回此错误:
name@host [~/test]# phpunit --verbose HeadersTest.php
PHPUnit 3.6.10 by Sebastian Bergmann.
E
Time: 0 seconds, Memory: 2.25Mb
There was 1 error:
1) HeadersTest::testHeaders
Cannot modify header information - headers already sent by (output started at /usr/local/lib/php/PHPUnit/Util/Printer.php:173)
/test/HeadersTest.php:9
FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
这看起来好像在测试运行之前有其他内容输出到终端,即使没有包含其他文件并且在 PHP 标记的开头之前没有其他字符。会不会是 PHPunit 内部的东西导致了这种情况?
问题可能是什么?
【问题讨论】:
-
如果还有其他人对此感兴趣,我只想介绍一下。 headers_list() 在运行 PHPunit(使用 PHP CLI)时不起作用,但 xdebug_get_headers() 可以替代。
标签: php unit-testing phpunit output-buffering