| Prev | Next |
PHPUnit は、テスト結果の出力書式として以下のようなものに対応しています。
PHPUnit がサポートする XML のフォーマットは、 Apache Ant の JUnit タスク が使用しているものを参考にしています。 以下の例は、ArrayTest のテストが生成した XML ログファイルです。
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="ArrayTest"
file="/home/sb/ArrayTest.php"
tests="2"
failures="0"
errors="0"
time="0.016030">
<testcase name="testNewArrayIsEmpty"
class="ArrayTest"
file="/home/sb/ArrayTest.php"
line="6"
time="0.008044"/>
<testcase name="testArrayContainsAnElement"
class="ArrayTest"
file="/home/sb/ArrayTest.php"
line="15"
time="0.007986"/>
</testsuite>
</testsuites>
次の XML ログファイルは、テストクラス FailureErrorTest にある 2 つのテスト testFailure および testError が出力したものです。失敗やエラーがどのように表示されるのかを確認しましょう。
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="FailureErrorTest"
file="/home/sb/FailureErrorTest.php"
tests="2"
failures="1"
errors="1"
time="0.019744">
<testcase name="testFailure"
class="FailureErrorTest"
file="/home/sb/FailureErrorTest.php"
line="6"
time="0.011456">
<failure type="PHPUnit_Framework_ExpectationFailedException">
testFailure(FailureErrorTest)
Failed asserting that <integer:2> matches expected value <integer:1>.
/home/sb/FailureErrorTest.php:8
</failure>
</testcase>
<testcase name="testError"
class="FailureErrorTest"
file="/home/sb/FailureErrorTest.php"
line="11"
time="0.008288">
<error type="Exception">testError(FailureErrorTest)
Exception:
/home/sb/FailureErrorTest.php:13
</error>
</testcase>
</testsuite>
</testsuites>
PHPUnit がコードカバレッジ情報のログ出力の際に使用している XML のフォーマットは、 Clover のものを参考にしています。 以下の例は、BankAccountTest のテストが生成した XML ログファイルです。
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1184835473" phpunit="3.2.10">
<project name="BankAccountTest" timestamp="1184835473">
<file name="/home/sb/BankAccount.php">
<class name="BankAccountException">
<metrics methods="0" coveredmethods="0" statements="0"
coveredstatements="0" elements="0" coveredelements="0"/>
</class>
<class name="BankAccount">
<metrics methods="4" coveredmethods="4" statements="13"
coveredstatements="5" elements="17" coveredelements="9"/>
</class>
<line num="77" type="method" count="3"/>
<line num="79" type="stmt" count="3"/>
<line num="89" type="method" count="2"/>
<line num="91" type="stmt" count="2"/>
<line num="92" type="stmt" count="0"/>
<line num="93" type="stmt" count="0"/>
<line num="94" type="stmt" count="2"/>
<line num="96" type="stmt" count="0"/>
<line num="105" type="method" count="1"/>
<line num="107" type="stmt" count="1"/>
<line num="109" type="stmt" count="0"/>
<line num="119" type="method" count="1"/>
<line num="121" type="stmt" count="1"/>
<line num="123" type="stmt" count="0"/>
<metrics loc="126" ncloc="37" classes="2" methods="4" coveredmethods="4"
statements="13" coveredstatements="5" elements="17"
coveredelements="9"/>
</file>
<metrics files="1" loc="126" ncloc="37" classes="2" methods="4"
coveredmethods="4" statements="13" coveredstatements="5"
elements="17" coveredelements="9"/>
</project>
</coverage>
JavaScript Object Notation (JSON) は、軽量なデータ交換用フォーマットです。次の例は、 ArrayTest のテストが作成した JSON メッセージです。
{"event":"suiteStart","suite":"ArrayTest","tests":2}
{"event":"test","suite":"ArrayTest",
"test":"testNewArrayIsEmpty(ArrayTest)","status":"pass",
"time":0.000460147858,"trace":[],"message":""}
{"event":"test","suite":"ArrayTest",
"test":"testArrayContainsAnElement(ArrayTest)","status":"pass",
"time":0.000422954559,"trace":[],"message":""}
次の JSON メッセージは、 FailureErrorTest にある 2 つのテスト testFailure および testError が出力したものです。失敗やエラーがどのように表示されるのかを確認しましょう。
{"event":"suiteStart","suite":"FailureErrorTest","tests":2}
{"event":"test","suite":"FailureErrorTest",
"test":"testFailure(FailureErrorTest)","status":"fail",
"time":0.000483989716,"trace":[],"message":""}
{"event":"test","suite":"FailureErrorTest",
"test":"testError(FailureErrorTest)","status":"error",
"time":0.000466108322,"trace":[],"message":""}
Test Anything Protocol (TAP) は、Perl のモジュールをテストする際に使用する、 シンプルなテキストベースのインターフェイスです。 以下の例は、ArrayTest のテストが生成した TAP ログファイルです。
1..2 # TestSuite "ArrayTest" started. ok 1 - testNewArrayIsEmpty(ArrayTest) ok 2 - testArrayContainsAnElement(ArrayTest) # TestSuite "ArrayTest" ended.
次の TAP ログファイルは、テストクラス FailureErrorTest にあるメソッド testFailure および testError が出力したものです。失敗やエラーがどのように表示されるのかを確認しましょう。
1..2 # TestSuite "FailureErrorTest" started. not ok 1 - Failure: testFailure(FailureErrorTest) not ok 2 - Error: testError(FailureErrorTest) # TestSuite "FailureErrorTest" ended.
PHPUnit は、テスト結果を図示することができます。 GraphViz ツール群を使用すると、これを画像などの便利な形式に変換することができます。
phpunit --log-graphviz BankAccount.dot BankAccountTest
PHPUnit 3.2.10 by Sebastian Bergmann.
...
Time: 0 seconds
OK (3 tests)
次の例は、BankAccountTest のテストから生成された (そしてカレントディレクトリの BankAccount.dot に保存された) GraphViz マークアップです。
digraph G {
graph [ overlap="scale",splines="true",sep=".1",fontsize="8" ];
"BankAccountTest" [ color="green" ];
subgraph "cluster_BankAccountTest" {
label="";
"testBalanceIsInitiallyZero" [ color="green" ];
"testBalanceCannotBecomeNegative" [ color="green" ];
"testBalanceCannotBecomeNegative2" [ color="green" ];
}
"BankAccountTest" -> "testBalanceIsInitiallyZero";
"BankAccountTest" -> "testBalanceCannotBecomeNegative";
"BankAccountTest" -> "testBalanceCannotBecomeNegative2";
}
GraphViz ソフトウェア群に含まれるコマンドラインツール dot を使用すると、 このマークアップから図を作成することができます。
dot -T png -o BankAccount.png BankAccount.dot
図 16.1 は、上の GraphViz マークアップをもとに作成したテスト結果の図です。
成功したテストは緑の線で、失敗したりエラーが発生したものは赤い線で、 そして不完全だったり省略されたりしたテストは黄色い線で表示されます。 テストスイートなどの親ノードは、もしその子ノード (テスト) が成功しなかった場合は緑の線になりません。
PHPUnit は、テストの結果やコードカバレッジのデータを テストデータベース に書き込むことができます。今後、このデータを利用した 新機能 を追加することを検討中です。
テストスイートを 実行 するたびに、run テーブルに行が追加されます。
テストスイート内の テスト が実行されるたびに、test テーブルに行が追加されます。
あるリビジョン内の各 ファイル について、code_file テーブルの中に対応する行が作成されます。
あるリビジョン内のファイルで宣言されている各 クラス について、code_class テーブルの中に対応する行が作成されます。
あるリビジョン内のファイルで宣言されている各 メソッド について、code_method テーブルの中に対応する行が作成されます。
あるリビジョン内のファイルの コードの各行 について、code_line テーブルの中に対応する行が作成されます。
code_coverage テーブルは、テストとそれがカバーするコードの行を関連づけます。
テストの結果やコードカバレッジをデータベースに書き込むには、 用意されているスキーマのいずれかを使用してまず最初にデータベースを作成しなければなりません。
sqlite3 BankAccount.db < PHPUnit/Util/Log/Database/SQLite3.sql
そしてテストスイートを実行し、 テストの結果とコードカバレッジデータをデータベースに書き込みます。
phpunit --test-db-dsn sqlite:///home/sb/BankAccount.db --test-db-log-rev 1 BankAccountTest
PHPUnit 3.2.10 by Sebastian Bergmann.
...
Time: 0 seconds
OK (3 tests)
Storing code coverage data in database, this may take a moment.
表 16.1 は、 TextUI テストランナー (第 5 章 を参照ください) でテストデータベース用に指定できる引数をまとめたものです。
表16.1 TextUI のテストデータベース用の引数
| 引数 | 意味 |
|---|---|
--test-db-dsn <dsn>
|
データベースに接続するための PDO データソース名 (DSN)。 DSN は一般的な形式は、まず PDO ドライバ名、そしてコロン、 その後に各 PDO ドライバ固有の接続書式が続きます。 |
--test-db-log-rev <r>
|
たとえば Subversion のグローバルリビジョン番号 のような数値で、コードベースの現在のリビジョンを識別するために使用します。 |
--test-db-log-info ...
|
テスト環境に関する追加情報。 |
| Prev | Next |
Copyright © 2005-2011 Sebastian Bergmann.