Chinaunix首页 | 论坛 | 博客
  • 博客访问: 685606
  • 博文数量: 132
  • 博客积分: 10060
  • 博客等级: 上将
  • 技术积分: 1732
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-21 12:35
个人简介

迷惘的码农。

文章分类

全部博文(132)

文章存档

2013年(1)

2011年(2)

2010年(9)

2009年(41)

2008年(79)

我的朋友

分类:

2008-04-07 09:34:29

第 16 章 日志

PHPUnit支持以多种格式记录测试结果。

XML格式

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的测试用例类的两个测试testFailuretestError生成的,并且显示如何表示失败和错误。



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



代码覆盖率(XML)

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"/>

JavaScript对象表示法(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的测试用例类的两个测试testFailuretestError生成的,并且显示如何表示失败和错误。

{"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的测试用例类的两个测试testFailuretestError生成的,并且显示如何表示失败和错误。

1..2
# TestSuite "FailureErrorTest" started.
not ok 1 - Failure: testFailure(FailureErrorTest)
not ok 2 - Error: testError(FailureErrorTest)
# TestSuite "FailureErrorTest" ended.

GraphViz标记

利用工具,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. 测试结果的图示

Graph representation of the test result

成功的测试用绿色边框显示,失败和错误是红色边框,未完成和跳过的是黄色边框。如果有未成功的子节点(如测试),那么父节点(如测试套件)被显示为非绿色边框。

测试数据库

PHPUnit可以把测试结果和代码覆盖率数据写入。有几个依赖该数据。

  1. 测试套件的每次运行对应run表中的一行。

  2. 构成一次测试运行的每个测试对应test表中的一行。

  3. 构成一个修订版的每个文件对应code_file表中的一行。

  4. 构成一个修订版的文件中声明的每个对应code_class表中的一行。

  5. 构成一个修订版的文件中声明的每个方法对应code_method表中的一行。

  6. 属于构成修订版的一个文件的每个代码行对应code_line表中的一行。

  7. 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 ...例如关于测试环境的附加信息。

阅读(1566) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~