迷惘的码农。
分类:
2008-04-09 15:23:47
PHPUnit_Framework_Test
是所有具有测试作用的对象用到的通用接口。实现者可以描述一个或更多测试。中显示两个方法。
表 22.6.实现者方法
方法 | 含义 |
---|---|
int count() | 返回测试数量。 |
void run(PHPUnit_Framework_TestResult $result) | 运行测试并向$result 报告错误。 |
PHPUnit_Framework_TestCase
和PHPUnit_Framework_TestSuite
是PHPUnit_Framework_Test
的两个最出色的实现。你可以自己实现PHPUnit_Framework_Test
。该接口刻意保持很小因此易于实现。
你的测试用例类必须继承自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_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
的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
被其他包用到的工具类。