2012-05-09 6 views
32

"厳密なモードがPHPUnitにある"とは何ですか?PHPUnit Strictモードは何をしますか?

例:

phpunit --strict 

またはphpunit.xmlで

<phpunit strict="true"> 

注意してください、私はちょうどそれを試して、それをオンにし、私のテストは

PHP_Invoker_TimeoutException: Execution aborted after 1 second 

答えて

19

短い答え:長い走行試験のための が許容実行時間を増やすために、アノテーションを使用します。

@large // 10 seconds 
@medium // 5 seconds 
@small // 1 second max <-- Default, so no point using 

ロング回答:ここで

が導き出された情報の更新されたセットです@クロジンの助けを借りて。

私のケースでは、テストに時間がかかり過ぎるというエラーが発生しました(> 1秒。)(Doctrine ORMスキーマのdrop + createは遅くなる可能性があります、see this ZendCast for what I was doing)。これはPHP_Invokerからの問題(および何らかの出力)を引き起こしていました。厳密なモードは出力を許可しません。

リーディング/リバースエンジニアリングによって/usr/share/php/pear/share/pear/PHPUnit/Util/Test.php::getSize()(および同じクラスのgetGroups())..私はそこに考え出しました

@large // 10 seconds 
@medium // 5 seconds 
@small // 1 second max run time 

これらは、クラスレベルまたはメソッドレベルで指定できます。 Issue #490 on the PHPUnit githubクラスレベルとメソッドレベルの両方を提供しているため、YMMVを混在させると問題が発生します。クロジンが言ったように、割り当てられたタイムアウトはそれぞれ10,5,1秒です。

代わりの解決方法は、呼び出された関数が(遅いコンピュータで)実行できる時間を長くすることでした。

PHP_Invoker
タイムアウトで呼び出し可能オブジェクトを呼び出すためのユーティリティクラス:ここ

sudo vi /usr/share/php/pear/share/pear/PHP/Invoker.php 

Increase line 1 "declare(ticks = 1);" to 
    "declare(ticks = 10);" // or any higher int that meets your needs 

は私が解決策を見つける助けstrictモードに関する情報の束です。このパッケージは、厳密なモードでテストタイムアウトを強制するために必要です。 [PHPUnit Install Instructions]何を主張していない

厳格なモード テストは、不完全な(またはスキップ)している不完全 テストとしてマークされているSlideshare by Sebastian Bergmann (slide 10)


何のコードカバレッジを得ない、PHPUnitがあるすべての出力を飲み込んだことに注意してくださいテストの実行中に放出される。 strictモードでは、出力を出すテストは失敗します。 Testing output section of PHPUnit Manual

+5

ここに記載されているように、phpunit.xmlファイルでもテストした時間の変更http://stackoverflow.com/a/13722524/1387163 –

31

で失敗し始めましたPHPUnitは、テストの実行中に出力されるすべての出力を呑み込む。 strictモードでは、出力を出すテストは失敗します。無アサーションと

  1. テストは、不完全な/失敗としてマークされる可能性があります:私はドキュメントで見つけることができるすべてですが、私はまた、ソースをチェックしたいと私はstrictモードでことがわかっ

  • それぞれのテストは、サイズに応じて実行時間制限があり、pcntl extensionPHP_Invoker libraryの存在によって実行される可能性があります。

    • timeoutForSmallTests(デフォルト値:1)
    • timeoutForMediumTests(既定値:10)
    • timeoutForLargeTests(既定値:60)

    試験サイズ(小3つのタイムアウト値があります、中または大)は、PHPUnit_Util_Test::getSize()メソッドによって決定されます。

    • テストケースdescendi PHPUnit_Extensions_Database_TestCaseまたはPHPUnit_Extensions_SeleniumTestCaseからの値が大きい。
    • テストケースと個々のテストは、それぞれ 'large'または 'medum'に追加することで、大規模または中規模にすることもできます。groups
    • それ以外の場合、テストは小さいです。

  • strictモードでのみ上記の3つの変更を行うものと思われますが、私はそれについて全くわからないんだけど。 PHPUnitのソースを以前に学んだことはありませんし、strictモードも使用していません。

    +1

    +1:細部まで掘り下げてくれてありがとう。 – hakre

    関連する問題