9

非常に長いテストを簡単に認識できるように、単体テストを厳密モードで実行し続けたいのですが、同時にデフォルトのタイムアウトの 1 秒では十分ではありません。すべてのテストで変更できますか? @short / @medium / @long注釈を使用して各クラス (および個々のテスト) にタイムアウトを設定できることは知っていますが、すべてのテストにそのようなものはありますか? おそらくphpunit.xmlで?

PHP_Invoker_TimeoutException: Execution aborted after 1 secondこれは、たまに起こることを避けるためです。

4

2 に答える 2

26

このオプションは、phpunit.xml で必要な時間を設定することで有効にできます。時間は秒単位です。

例:

<phpunit
    strict="true"
    timeoutForSmallTests="1"
    timeoutForMediumTests="5"
    timeoutForLargeTests="10"
>
 // test suites
</phpunit>

次のような実際のテスト機能をマークすることで、テストを中規模または大規模にマークできます

/**
 * @medium
 */
public function testTestThing() {
     $this->assertTrue(false);
}

編集:最新の PHPUnit バージョンでは、これらのタイムアウトは行われなくなりました。また、以前に厳密モードでカバーされていたものごとに個別のフラグを導入することで、一般的に厳密モードの動作も変更されています。

beStrictAboutTestsThatDoNotTestAnything="true"
checkForUnintentionallyCoveredCode="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTestSize="true"
beStrictAboutChangesToGlobalState="true"

無関係な警告: また、XML 構成内のテストへのパスが、XML 構成ファイルに対して相対的になるように変更されます。これは、パスが現在の作業ディレクトリに対して相対的であるという古いデフォルトとは対照的です。

于 2012-12-05T11:43:42.377 に答える
5

または、次のようにsetUp()メソッドでも設定できます。

$this->getTestResultObject()->setTimeoutForSmallTests(1);
$this->getTestResultObject()->setTimeoutForMediumTests(5);
$this->getTestResultObject()->setTimeoutForLargeTests(10);
于 2013-02-01T08:00:17.800 に答える