PHPUnit:找出标头的发送位置

时间:2013-02-02 11:56:16

标签: php phpunit

我有一段代码,我正在使用PHPUnit进行测试,并收到以下错误:

session_regenerate_id(): Cannot regenerate session id - headers already sent

我想知道发送标头的位置;一般来说,当我在浏览器中测试代码时,我会看到一个警告,提到这样的位置:

Warning: Cannot modify header information - headers already sent by 
(output started at /www/xxxx/x.php:52) in /www/xxxx/index.php on line 123

但在PHPUnit测试中,没有这样的信息; PHPUnit只显示上面的错误和回溯:

/var/www/yii/framework/web/CHttpSession.php:166
/var/www/yii/framework/web/auth/CWebUser.php:681
/var/www/yii/framework/web/auth/CWebUser.php:214
...

只指向错误发生的位置。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

它告诉您标题的发送位置 解决方案是模拟测试函数中的会话组件。

$mockSession = $this->getMock('CHttpSession', array('regenerateID'));  
Yii::app()->setComponent('session', $mockSession);

答案 1 :(得分:0)

我遇到了同样的错误,但是我没有使用Yii。这是我使用ob_*函数解决的方法:

我使用的是phpunit.xml配置文件,其中提到了 bootstrap 文件:

<phpunit bootstrap="phpunit_bootstrap.php">
    ...
</phpunit>

phpunit_bootstrap.php中,我开始使用ob_start()

<?php
ob_start();
// some other configuration lines ...

然后我在测试类中使用了2个 PHPUnit 方法:

// Erase output buffer before starting the tests
public static function setUpBeforeClass(){
    ob_clean();
}

// Turn off output buffering after the tests
public static function tearDownAfterClass(){
    ob_end_clean();
}