6. リスクを伴うテスト

PHPUnit は、テストを実行する際に、以下のような追加のチェックをすることができます。

無意味なテスト

PHPUnit はデフォルトで、何も確かめていないテストを検出します。 このチェックを無効にするには、 コマンドライン オプション --dont-report-useless-tests を使うか、あるいは PHPUnit の 設定ファイルbeStrictAboutTestsThatDoNotTestAnything="false" を設定します。

何もアサーションを実行していないテストは、このチェックを有効にしておくと、 危険であるとマークされます。モックオブジェクトの Expectation はアサーションとみなします。

意図せぬうちにカバーされているコード

PHPUnit は、意図せずカバーされているコードを検出することができます。 このチェックを有効にするには、 コマンドライン オプション --strict-coverage を使うか、あるいは PHPUnit の 設定ファイルbeStrictAboutCoversAnnotation="true" を設定します。

@covers アノテーションつきのテストが、 @covers@uses に記されていないコードを実行している場合に、 このチェックを有効にしておくと、危険であるとマークされます。

その上、 PHPUnit の 設定ファイルforceCoversAnnotation="true" を設定しておくと、 @covers アノテーションが設定されていないテストは危険であるとマークされます。

テストの実行時の出力

PHPUnit は、テストの最中の出力を検出することができます。 このチェックを有効にするには、 コマンドライン オプション --disallow-test-output を使うか、あるいは PHPUnit の 設定ファイルbeStrictAboutOutputDuringTests="true" を設定します。

テストコードあるいは被テストコードの中で、print などで何かを出力している場合に、 このチェックを有効にしておくと、危険であるとマークされます。

テストの実行時のタイムアウト

PHP_Invoker パッケージがインストールされており、 かつ pcntl 拡張モジュールが利用可能な場合は、 テストの実行時間に制限を設けることができます。 この時間制限を有効にするには、 コマンドライン オプション --enforce-time-limit を使うか、あるいは PHPUnit の 設定ファイルenforceTimeLimit="true" を設定します。

@large とマークされたテストは、 実行時間が 60 秒を超えたら失敗します。 このタイムアウト時間は、 設定ファイルtimeoutForLargeTests 属性で変更できます。

@medium とマークされたテストは、 実行時間が 10 秒を超えたら失敗します。 このタイムアウト時間は、 設定ファイルtimeoutForMediumTests 属性で変更できます。

@medium とも @large ともマークされていないテストは、 @small とマークされたものとみなします。 このテストは、実行時間が 1 秒を超えたら失敗します。 このタイムアウト時間は、 設定ファイルtimeoutForSmallTests 属性で変更できます。

グローバルな状態の変更

PHPUnit は、グローバルな状態を変更するテストを厳格にチェックすることができます。 このチェックを有効にするには、 コマンドライン--strict-global-state オプションを指定するか、PHPUnit の 設定ファイルbeStrictAboutChangesToGlobalState="true" を指定します。