0

在 Eclipse 中使用 MakeGood 插件运行设置标头的测试时,我得到:

Cannot modify header information - headers already sent by (output started at C:\wamp\bin\php\php5.3.8\pear\PHPUnit\Util\Printer.php:173)

当我通过 Phing 运行相同的测试时,它运行良好。我假设 Phing 将输出设置为 stderr,因为当我使用 --stderr 开关从 phpunit 命令行运行相同的测试时,它工作正常。它的失败方式与没有 --stderr 开关的 MakeGood 相同。

有没有办法解决这个问题,或者有办法在 MakeGood 插件中将输出设置为 stderr?

此外,这不应该有任何区别,但这是一个 Zend 框架项目,我已经设置

Zend_Session::$_unitTestEnabled = true; 

在我的测试引导程序中。

4

1 回答 1

2

问题是 PHPUnit 会在屏幕上打印一个标题,此时 PHP 不能再发送任何标题。

解决方法是在一个隔离的进程中运行测试。这是一个例子

<?php

class FooTest extends PHPUnit_Framework_TestCase
{
    /**
     * @runInSeparateProcess
     */
    public function testBar()
    {
        header('Location : http://foo.com');
    }
}

这将导致:

$ phpunit FooTest.php
PHPUnit 3.6.10 by Sebastian Bergmann.

.

Time: 1 second, Memory: 9.00Mb

OK (1 test, 0 assertions)

关键是 @runInSeparateProcess 注释。

您还可以在运行 PHPUnit 时使用 --process-isolation 标志。

如果您正在围绕 Zend Framework 编写代码,则不应直接使用 header()。你应该使用 Zend_Http_Response。

此外,如果您正在进行 MVC 级别测试,我建议您查看Zend_Test_PHPUnit

于 2012-03-20T19:06:30.497 回答