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