PHPUnit袖珍指南之命令行測試工具

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 configuration指令定義的路徑中尋找源文件。按照PEAR的命名規則,形如Project_Package_Class的類名會映射到的源文件為Project/Package/Class.php。

  –skeleton

  為類Unit(在文件Unit.php中)生成一個名為UnitTest(在文件UnitTest.php中)的測試用例類的框架。對原始類的每個方法,在生成的測試用例類中提供瞭一個未完成的測試用例(見本書後的“未完成測試”部分)。

  下面的例子顯示瞭如何為一個名為Sample的類生成一個測試類的框架。

phpunit –skeleton Sample
PHPUnit 2.3.0 by Sebastian Bergmann.
Wrote test class skeleton for Sample to
SampleTest.php.
phpunit SampleTest
PHPUnit 2.3.0 by 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解釋器類解決這個問題。

發佈留言