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 由 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.phpUnitTestSuite的一個實例)
phpunit UnitTest UnitTest.php
運行類指定的來源檔案(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 configuration指令定義的路徑中尋找原始檔。依照PEAR的命名規則,形如Project_Package_Class的類別名稱會對應到的來源檔案為Project/Package/Class.php。
--skeleton
為類別Unit(在檔案Unit.php中)產生一個名為UnitTest(在檔案UnitTest.php中)的測試案例類別的框架。對原始類別的每個方法,在產生的測試案例類別中提供了一個未完成的測試案例(請參閱本書後的「未完成測試」部分)。
下面的範例顯示如何為一個名為Sample的類別產生一個測試類別的框架。
phpunit --skeleton Sample
PHPUnit 2.3.0 由 Sebastian Bergmann.
Wrote test class skeleton for Sample to
SampleTest.php.
phpunit SampleTest
PHPUnit 2.3.0 由 Sebastian Bergmann.
I
Time: 0.007268
There was 1 incomplete test case:
1) testSampleMethod(SampleTest)
OK, but incomplete test cases!!!
Tests run: 1, incomplete test cases: 1.
當你為現有程式碼書寫測試時,你必須重複很多相同的程式碼片段,如:
public function testSampleMethod( ) {}
PHPUnit可以幫助你分析現有程式碼,生成測試用例類別的框架。
--wait
每個測試結束時,等待一次擊鍵。這很有用,特別是你在一個只有測試一直運行在打開的視窗中執行測試時。
提示當被測試程式碼中有PHP語法錯誤時,文字介面的測試會直接退出,不輸出任何錯誤訊息。標準的測試套件載入器會檢查測試套件的來源檔案的PHP語法錯誤,但是,它不會檢查測試套件所包含的來源檔案的語法錯誤。 PHPUnit的未來版本會用在砂箱中PHP解釋器類別來解決這個問題。