我正在尝试在相当不错的IDE PhpStorm中使用setcookie()函数进行一些单元测试。但是我每次都会收到以下错误:
Cannot modify header information - headers already sent by (output started at /tmp/phpunit.php:418)
可能是此错误的原因是在调用setcookie()之前使用带有flush()的print('some text')。但是刷新是在PhpStorm生成的/tmp/phpunit.php文件中执行的。虽然setcookie()是从我的来源中调用的。因此,我无法编辑生成的文件以进行某种输出缓冲。还有另外一刻:PhpStorm执行/tmp/phpunit.php脚本,如下所示:
/usr/bin/php /tmp/phpunit.php -config /var/www/.../protected/tests/phpunit.xml d /var/www/.../protected/tests/unit/user
请帮助我解决此问题。如何直接从PhpStorm运行单元测试?
最佳答案
解决此问题的一种可能方法是对setcookie()
函数使用“模拟”替代。
这是单元测试中的一种常见技术,在这种情况下,您希望测试不依赖于外部类或函数的东西,而这些类或函数不希望影响当前的测试。
这样做的方法是在单元测试代码中为setcookie()
创建一个 stub 函数定义。然后将在测试过程中调用此函数,而不是真正的setcookie()
函数。究竟如何实现此 stub 函数取决于您,并且将取决于您的代码将其用作什么。
这种方法的主要问题是PHP默认情况下不允许您覆盖现有功能-如果在标准的PHP安装上尝试此操作,则会收到“错误:无法重新声明功能”。
这个问题的解决方案是PHP的Runkit extension,它是专门为这种测试而设计的,并允许您rename an existing function,包括内置的。
如果在测试环境中将PHP安装配置为包含Runkit扩展,则可以进行这种测试。
希望能有所帮助。
关于php - PhpStorm,PHPUnit和setcookie,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5470560/