PHPUnit命令行测试工具是通过phpunit命令调用的。如下代码显示如何通过PHPUnit命令行测试工具运行测试。
phpunit ArrayTest
PHPUnit 2.3.0 by Sebastian Bergmann.
Time: 0.067288
OK (2 tests)
对每个测试,PHPUnit命令行测试工具打印一个字符表示进程:
·测试成功打印“.”。
·运行测试方法是发生了断言失败打印“F”。
·运行测试方法是发生了错误打印“E”。
·测试没有完成或测试没有实现打印“I”(见本书后“未完成的测试”一章)。
PHPUnit可以区分失败和错误。一个失败是PHPUnit的断言违例,错误是一个意料外的异常或一个PHP错误。有时候这种差别是有用的,因为错误相比失败更容易修正。如果你有一大串问题列表,最好先解决所有错误,然后看看有没有失败遗留下来。
让我们看看如下一些代码命令行测试工具的选项:
phpunit --help
PHPUnit 2.3.0 by Sebastian Bergmann.
Usage: phpunit [switches] UnitTest [UnitTest.php]
--coverage-data <file> Write code-coverage data in raw format to file.
--coverage-html <file> Write code-coverage data in HTML format to file.
--coverage-text <file> Write code-coverage data in text format to file.
--testdox-html <file> Write agile documentation in HTML format to file.
--testdox-text <file> Write agile documentation in Text format to file.
--log-xml <file> Log test progress in XML format to file.
--loader <loader> TestSuiteLoader implementation to use.
--skeleton Generate skeleton UnitTest class for Unit in Unit.php.
--wait Waits for a keystroke after each test.
--help Prints this usage information.
--version Prints the version and exits.
phpunit UnitTest
运行类UnitTest提供的测试,该类应该定义在源文件UnitTest.php中。
类UnitTest必须继承PHPUnit2_Framework_TestCase类,或是提供了公有静态方法suite,并返回PHPUnit2_ Framework_Test对象的类(例如,类PHPUnit2_Framework_TestSuite的一个实例)
phpunit UnitTest UnitTest.php
运行类UnitTest提供的测试,该类要定义在命令指定的源文件(UnitTest.php)中。
--coverage-data, --coverage-html, and --coverage-text
控制运行测试的代码覆盖信息的分析和集合(参见本书后代码覆盖分析一节)
--testdox-html and --testdox-text
以HTML或普通文本格式生成运行测试的敏捷文档(参见本书后的“测试的其他用途”一章)
--log-xml
生成运行测试的XML格式的日志文件。
下一个例子显示为ArrayTest中的测试生成的XML日志文件。
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="ArrayTest" tests="2" failures="0" errors="0" time="0.020026">
<testcase name="testNewArrayIsEmpty" class="ArrayTest" time="0.014449"/>
<testcase name="testArrayContainsAnElement" class="ArrayTest" time="0.005577"/>
</testsuite>
</testsuites>
下面的XML日志文件是为名为FailureErrorTest的测试类两个测试生成的,一个是testFailure,一个是testError。这显示了失败和错误是如何分别表示的。
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="FailureErrorTest" tests="2" failures="1" errors="1" time="0.013603">
<testcase name="testFailure" class="FailureErrorTest" time="0.011872">
<failure message="" type="PHPUnit2_Framework_AssertionFailedError"></failure>
</testcase>
<testcase name="testError" class="FailureErrorTest" time="0.001731">
<error message="" type="Exception"></error>
</testcase>
</testsuite>
</testsuites>
--loader
使用するテスト スイート ローダーを指定します。
標準テスト スイート ローダーは、現在の作業ディレクトリと PHP の include_path 構成ディレクティブで定義されたパスでソース ファイルを検索します。 PEAR の命名規則によれば、Project_Package_Class の形式でクラス名にマッピングされたソース ファイルは Project/Package/Class.php となります。
--skeleton
クラス Unit (ファイル Unit.php 内) に対して、UnitTest という名前のテスト ケース クラス (ファイル UnitTest.php 内) のスケルトンを生成します。元のクラスのメソッドごとに、未完了のテスト ケースが生成されたテスト ケース クラスに提供されます (本書の最後にある「未完了のテスト」セクションを参照)。
次の例は、Sample という名前のクラスのテスト クラス スケルトンを生成する方法を示しています。
phpunit --skeleton サンプル
PHPUnit 2.3.0 by Sebastian Bergmann.
Sample のテスト クラス スケルトンを
SampleTest.php.
phpunit SampleTest
に書き込みましたPHPUnit 2.3.0 by Sebastian Bergmann.
I
時間: 0.007268
不完全なテスト ケースが 1 つありました:
1) testSampleMethod(SampleTest)
OK、しかし不完全なテスト ケースです!!!
テスト実行: 1、不完全なテスト ケース: 1.
既存のコードのテストを作成する場合、次のような同じコード スニペットを多数繰り返す必要があります。
public function testSampleMethod( ) {}
PHPUnit は、既存のコードを分析し、テスト ケース クラスのフレームワークを生成するのに役立ちます。
--wait
各テストの終了時に、キーストロークを待ちます。これは、常にテストのみが実行されているウィンドウでテストを実行している場合に特に便利です。
ヒント: テスト対象のコードに PHP 構文エラーがある場合、テキスト インターフェイス テストはエラー メッセージを出力せずに直接終了します。標準のテスト スイート ローダーは、テスト スイートのソース ファイルに PHP 構文エラーがないかチェックしますが、テスト スイートに含まれるソース ファイルの構文エラーはチェックしません。 PHPUnit の将来のバージョンでは、サンドボックス化された PHP インタープリタ クラスを使用してこの問題に対処する予定です。