我正在使用PHPUnit测试一套REST Web服务。我们正在使用输出缓冲来对响应进行gzip编码。当我使用PHPUnit运行服务测试时,我收到错误:
Cannot modify header information - headers already sent by (output started at /home/dotcloud/php-env/share/php/PHPUnit/Util/Printer.php:172)
我抱怨的是,我的代码回显了浏览器的输出......
我能够通过在测试类的顶部添加ob_start()
调用来暂时解决这个问题,但是当我一次运行多个测试时,我再次收到此错误。
有什么想法吗?
答案 0 :(得分:11)
有几种选择有不同的优点和缺点:
@runInSeparateProcess
在单独的进程中运行测试。 良好:更好的测试隔离,糟糕:性能更差,无法与全局常量一起使用--stderr
标志将PHPUnit输出定向到STDERR。 好:测试按预期工作而不做任何更改,错误:感觉就像一个肮脏的解决方法,可能是CI工具的问题header()
的类,或者如果这不容易实现,或者您想要进行全功能测试,请模拟header()
函数本身。有关模拟this answer中内置函数的更多信息。 好:你也可以测试标题的内容,你的测试确实更少依赖于全局状态错误:你需要编写更多的测试代码我去寻找(3)并且可能重构代码,以便有一个单独的类负责标题并且可以很容易地模拟。