迷惘的码农。
分类:
2008-04-07 09:34:29
PHPUnit支持以多种格式记录测试结果。
PHPUnit支持的XML格式基于用的那种,不太严格。下面的例子显示了为ArrayTest
中的测试生成的XML日志文件:
failures="0" errors="0" time="0.0034592151641846">
file="/home/sb/ArrayTest.php" time="0.00038909912109375"/>
file="/home/sb/ArrayTest.php" time="0.0030701160430908"/>
下面的XML日志文件是为名为FailureErrorTest
的测试用例类的两个测试testFailure
和testError
生成的,并且显示如何表示失败和错误。
tests="2" failures="1" errors="1" time="0.0008389949798584">
file="/home/sb/FailureErrorTest.php" time="0.00056290626525879">
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ -1 +1 @@
-foo
+bar
/home/sb/FailureErrorTest.php:8
file="/home/sb/FailureErrorTest.php" time="0.00027608871459961">
Exception: An error occured.
/home/sb/FailureErrorTest.php:13
PHPUnit支持的用于代码覆盖率信息日志的XML格式基于用的那种,但并不严格。下面的例子显示为BankAccountTest
中的测试生成的XML日志文件:
coveredstatements="0" elements="0" coveredelements="0"/>
coveredstatements="5" elements="17" coveredelements="9"/>
statements="13" coveredstatements="5" elements="17"
coveredelements="9"/>
coveredmethods="4" statements="13" coveredstatements="5"
elements="17" coveredelements="9"/>
是个轻量级的数据互换格式。下面的例子显示为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
的测试用例类的两个测试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":""}
是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可以生成关于测试结果的描述图示,它可以多种有用的格式,例如图像,呈现为图表。
phpunit --log-graphviz BankAccount.dot BankAccountTest
PHPUnit 3.2.10 by Sebastian Bergmann.
...
Time: 0 seconds
OK (3 tests)
下面的例子显示为BankAccountTest
中的测试生成的GraphViz标记(并且存为当前目录中的BankAccount.dot
文件):
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
显示从上面的GraphViz标记生成的测试结果的图示。
图 16.1. 测试结果的图示
成功的测试用绿色边框显示,失败和错误是红色边框,未完成和跳过的是黄色边框。如果有未成功的子节点(如测试),那么父节点(如测试套件)被显示为非绿色边框。
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.
显示TextUI测试启动器(见)理解的用于测试数据库的参数。
表 16.1. 用于测试数据库的TextUI参数
参数 | 含义 |
---|---|
--test-db-dsn | 用于数据库连接的PDO数据源名(DSN)。DSN通常由PDO驱动名后跟冒号和PDO驱动规范连接语法组成。 |
--test-db-log-rev | 一个唯一标识代码库的当前修订版的数字,例如。 |
--test-db-log-info ... | 例如关于测试环境的附加信息。 |