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 で実行すると、問題なく動作します。--stderr スイッチを使用してphpunitコマンドラインから同じテストを実行すると、正常に動作するため、Phingは出力をstderrに設定すると想定しています。--stderr スイッチなしの MakeGood と同じように失敗します。

これを回避する方法、または MakeGood プラグインで出力を stderr に設定する方法はありますか?

また、これは何の違いもありませんが、これは Zend Framework プロジェクトであり、私は設定しました

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 に答える