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

迷惘的码农。

文章分类

全部博文(132)

文章存档

2013年(1)

2011年(2)

2010年(9)

2009年(41)

2008年(79)

我的朋友

分类:

2008-04-09 15:23:47

PHPUnit_Framework_Test

PHPUnit_Framework_Test是所有具有测试作用的对象用到的通用接口。实现者可以描述一个或更多测试。中显示两个方法。

表 22.6.实现者方法

方法含义
int count()返回测试数量。
void run(PHPUnit_Framework_TestResult $result)运行测试并向$result报告错误。

PHPUnit_Framework_TestCasePHPUnit_Framework_TestSuitePHPUnit_Framework_Test的两个最出色的实现。你可以自己实现PHPUnit_Framework_Test。该接口刻意保持很小因此易于实现。

PHPUnit_Framework_TestCase

你的测试用例类必须继承自PHPUnit_Framework_TestCase。多数时候,你将运行自动创建的测试套件中的测试。既然如此,你的每个测试都应该由test*(按照约定)指定的方法表示。

PHPUnit_Framework_TestCase实现PHPUnit_Framework_Test::count()为总是返回1。该类中实现的PHPUnit_Framework_Test::run(PHPUnit_Framework_TestResult $result)运行setUp(),运行测试方法,然后运行tearDown()并向PHPUnit_Framework_TestResult报告任何错误。

显示PHPUnit_Framework_TestCase提供的方法。

表 22.7. TestCase

方法含义
__construct()创建一个测试用例。
__construct(string $name)创建一个指定的测试用例。名字用于打印测试用例,且经常作为将要通过反射运行的测试方法的名字。
string getName()返回测试用例的名字。
void setName($name)设置试用例的名字。
PHPUnit_Framework_TestResult run(PHPUnit_Framework_TestResult $result)运行测试用例并在$result中报告的便利方法。
void runTest()如果你不想通过反射调用测试方法,重写测试方法。
object getMock($className, [array $methods, [array $arguments, [string $mockClassName, [boolean $callOriginalConstructor, [boolean $callOriginalClone, [boolean $callAutoload]]]]]])返回一个用于指定的$className的模拟对象(见)。缺省地,给定类的所有方法都是模拟的。当提供第二个(可选)参数时,只有名字出现在数组中的方法是模拟的。第三个(可选)参数持有参数数组,用于传入模拟对象的构造函数。第四个(可选)参数可用于为模拟对象指定类名。第五个(可选)参数可用于禁用对原始对象的__construct()方法的调用。第六个(可选)参数可用于禁用对原始对象的__clone()方法的调用。第七个(可选)参数可用于在模拟对象创建期间禁用__autoload()
void iniSet(string $varName, mixed $newValue)该方法是对函数的封装,在测试运行后自动地将改过的php.ini设定重置为初始值。
void setLocale(integer $category, string $locale, ...)该方法是对函数的封装,在测试运行后自动地将locale重置为初始值。

有两个模板方法——setUp()tearDown()——你可以重写以创建和清除为将进行的测试准备的对象。显示这些方法。还有第三个模板方法,sharedAssertions(),允许定义可被一个测试用例中的所有测试执行的断言。

表 22.8. 模板方法

方法含义
void setUp()重写以创建为测试准备的对象。每个运行的测试都将运行于自己专有的测试用例中,并且setUp()将为其每一个被分别调用。
void sharedAssertions()重写以执行为一个测试用例中的所有测试共享的断言。该方法在测试执行结束前和tearDown()被调用前调用。
void tearDown()重写以清理一旦测试结束即不再需要的对象。通常,你只需要在tearDown()中显式地清理外部资源(例如文件或套接字)。

PHPUnit_Framework_TestSuite

PHPUnit_Framework_TestSuitePHPUnit_Framework_Test的组合。最简单的情况,它包含一组测试用例,当套件运行时它们都会运行。由于它是个组合体,然而,套件可以包含套件,后者又可包含套件等等,使得可以容易地结合不同来源的测试并一起运行。

除了PHPUnit_Framework_Test的方法——run(PHPUnit_Framework_TestResult $result)count()PHPUnit_Framework_TestSuite提供一些创建命名或未命名实例的方法。 显示创建PHPUnit_Framework_TestSuite实例的方法。

表 22.9. 创建命名或未命名实例

方法含义
__construct()返回一个空测试套件。
__construct(string $theClass)返回一个测试套件,包含一个类名为$theClass的实例,该类的每个方法都以test*命名。如果不存在名为$theClass的类,一个名为$theClass空测试套件被返回。
__construct(string $theClass, string $name)返回一个名为$name的测试套件,包含一个类名为$theClass的实例,该类的每个方法都以test*命名。
__construct(ReflectionClass $theClass)返回一个测试套件,包含一个类名用$theClass描述的实例,该类的每个方法都以test*命名。
__construct(ReflectionClass $theClass, $name)返回一个名为$name的测试套件,包含一个类名用$theClass描述的实例,该类的每个方法都以test*命名。
string getName()返回测试套件名字。
void setName(string $name)设置测试套件名字。
void markTestSuiteSkipped(string $message)标记当前测试套件为将被跳过,$message是可选的。

PHPUnit_Framework_TestSuite也提供方法用于增加和获取PHPUnit_Framework_Test,如中所示。

表 22.10. 增加和获取测试

方法含义
void addTestSuite(PHPUnit_Framework_TestSuite $suite)向测试套件增加另一个测试套件。
void addTestSuite(string $theClass)向测试套件增加一个测试套件,它包含一个类名为$theClass的实例,该类的每个方法都以test*命名。
void addTestSuite(ReflectionClass $theClass)向测试套件增加一个测试套件,它包含一个类名用$theClass描述的实例,该类的每个方法都以test*命名。
void addTest(PHPUnit_Framework_Test $test)$test加入套件。
void addTestFile(string $filename)向套件增加一些测试,它们由给定的源文件中的类定义。
void addTestFiles(array $filenames)向套件增加一些测试,它们由给定的源文件中的类定义。
int testCount()返回由该套件直接包含的测试(非递归)的数量。
PHPUnit_Framework_Test[] tests()返回由该套件直接包含的测试。
PHPUnit_Framework_Test testAt(int $index)返回$index处的测试。

显示如何创建和运行测试套件。

范例 22.4: 创建和运行测试套件


require_once 'PHPUnit/Framework.php';
 
require_once 'ArrayTest.php';
 
// 创建一个包含源自类ArrayTest的测试的测试套件。
$suite = new PHPUnit_Framework_TestSuite('ArrayTest');
 
// 运行测试。
$suite->run();
?>

显示如何使用类PHPUnit_Framework_TestSuite通过分级组合测试用例来组织测试套件。

PHPUnit_Framework_TestSuite提供两个模板方法——setUp()tearDown(),分别在一个测试套件的(所有)测试运行前后被调用。

表 22.11. 模板方法

方法含义
void setUp()在测试套件的第一个测试运行前调用。
void tearDown()在测试套件的最后一个测试运行后调用。

PHPUnit_Framework_TestResult

当你在运行所有这些测试时,你需要在某处存储所有结果:运行了多少测试,哪个失败了,以及他们耗时多久。PHPUnit_Framework_TestResult收集这些结果。单个PHPUnit_Framework_TestResult被传遍测试树。当某个测试运行或失败,实际情况被记录在PHPUnit_Framework_TestResult中。在运行的结尾,PHPUnit_Framework_TestResult含有所有测试的摘要。

PHPUnit_Framework_TestResult也可被其他想要报告测试进程的对象观测。例如,一个图形测试启动器可能观测PHPUnit_Framework_TestResult并在每次某个测试启动时更新进度条。

概述PHPUnit_Framework_TestResult的API。

表 22.12. TestResult

方法含义
void addError(PHPUnit_Framework_Test $test, Exception $e)记录$test的运行引发了意外抛出$e
void addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e)记录$test的运行引发了意外抛出$e
PHPUnit_Framework_TestFailure[] errors()返回记录的错误。
PHPUnit_Framework_TestFailure[] failures()返回记录的失败。
PHPUnit_Framework_TestFailure[] notImplemented()返回记录的未完成的测试用例。
int errorCount()返回错误的数量。
int failureCount()返回失败的数量。
int notImplementedCount()返回未完成的测试用例的数量。
int count()返回运行的测试用例的总数。
boolean wasSuccessfull()返回是否所有测试运行成功。
boolean allCompletlyImplemented()返回是否所有测试都完全实现了。
void collectCodeCoverageInformation(bool $flag)启用或禁用代码覆盖率信息的收集。
array getCodeCoverageInformation()返回收集的代码覆盖率信息。

如果你要注册一个PHPUnit_Framework_TestResult的观察器,需要实现PHPUnit_Framework_TestListener。要注册,调用addListener(),如中所示。

表 22.13. TestResult和TestListener

方法含义
void addListener(PHPUnit_Framework_TestListener $listener)注册$listener,当记录测试结果时接收更新信息。
void removeListener(PHPUnit_Framework_TestListener $listener)从接收更新信息取消注册$listener

显示测试监听器实现的方法;又见。

表 22.14. TestListener回到例程

方法含义
void addError(PHPUnit_Framework_Test $test, Exception $e)$test抛出了$e
void addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e)$test放弃了一个断言,抛出一种PHPUnit_Framework_AssertionFailedError
void addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e)$test是未实现的测试。
void addSkippedTest(PHPUnit_Framework_Test $test, Exception $e)$test是已跳过的测试。
void startTestSuite(PHPUnit_Framework_TestSuite $suite)$suite将要运行。
void endTestSuite(PHPUnit_Framework_TestSuite $suite)$suite已完成运行。
void startTest(PHPUnit_Framework_Test $test)$test将要运行。
void endTest(PHPUnit_Framework_Test $test)$test已完成运行。

包结构

迄今为止,本书中提到的类大多出自PHPUnit/Framework。这儿是PHPUnit中的所有包:

  • PHPUnit/Framework

    PHPUnit中的基础类。

  • PHPUnit/Extensions

    PHPUnit框架的扩展。

  • PHPUnit/Runner

    运行测试支持的抽象。

  • PHPUnit/TextUI

    基于文本的测试启动器。

  • PHPUnit/Util

    被其他包用到的工具类。

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