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 属性で変更できます。