4

在 Eclipse 中通过以下代码片段使用 PHPUnit 时,出现错误:

无法发送会话 cookie - 标头已由(输出开始于 C:\wamp\bin\php\php5.3.13\pear\PHPUnit\Util\Printer.php:172)

Session_start() 在“LoginTest”中执行。如何阻止 PHPUnit 干扰会话 cookie 生成?

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once 'C:\wamp\bin\php\php5.3.13\pear\PHPUnit\autoload.php';

class MyTestCase extends PHPUnit_Framework_TestCase {
     static function main(){
        $suite = new PHPUnit_Framework_TestSuite("LoginTest");
        //$suite = new PHPUnit_Framework_TestSuite("FriendListTest");
        //$suite = new PHPUnit_Framework_TestSuite("UserTest");
        PHPUnit_TextUI_TestRunner::run($suite);
     }
}
MyTestCase::main();
?>

与解决方案非常相似的问题,不允许我在 Eclipse 中进行调试。

4

3 回答 3

3

在问题单元测试函数的顶部(或者如果所有函数都受到影响,那么在setUp(),甚至public static function setUpBeforeClass())添加以下代码:

@session_start();

或长手:

$prev = error_reporting(0);
session_start();
error_reporting($prev);

这看起来像是你永远不应该做的事情,但在这里它是完美的,因为抑制错误消息正是我们想要做的!


正如我在对 hakre 答案的评论中指出的那样,摆弄 ini 设置从来没有奏效,甚至在调用之前没有尝试过这种组合session_start()

 ini_set("session.use_cookies",0);
 ini_set("session.use_only_cookies",0);
 ini_set("session.use_trans_sid",1);
于 2014-05-01T01:28:26.790 回答
3

将以下内容添加到您的 phpunit.xml

<php>
    <ini name="session.use_cookies" value="0" />
    <ini name="session.use_only_cookies" value="0" />
    <ini name="session.use_trans_sid" value="0" />
    <ini name="session.cache_limiter" value="" />
</php>
于 2020-01-02T02:55:51.587 回答
0

如何阻止 PHPUnit 干扰会话 cookie 生成?

最直接的似乎不使用 cookie 进行会话:

http://php.net/session.use-cookies

于 2013-05-20T19:46:29.930 回答