从 PHPUnit_Extensions_TestDecorator 派生子类
最后更新于:2022-04-01 03:46:53
# 从 PHPUnit_Extensions_TestDecorator 派生子类
可以将测试用例或者测试套件包装在 `PHPUnit_Extensions_TestDecorator` 的子类中并运用 Decorator(修饰器)设计模式来在测试运行前后执行一些动作。
PHPUnit 了包含了一个具体的测试修饰器:`PHPUnit_Extensions_RepeatedTest`。它用于重复运行某个测试,并且只在全部循环中都成功时计为成功。
[Example 14.5, “RepeatedTest 修饰器”](# "Example 14.5. RepeatedTest 修饰器")展示了测试修饰器 `PHPUnit_Extensions_RepeatedTest` 的一个删减版本,用以说明如何编写你自己的测试修饰器。
**Example 14.5. RepeatedTest 修饰器**
~~~
<?php
require_once 'PHPUnit/Extensions/TestDecorator.php';
class PHPUnit_Extensions_RepeatedTest extends PHPUnit_Extensions_TestDecorator
{
private $timesRepeat = 1;
public function __construct(PHPUnit_Framework_Test $test, $timesRepeat = 1)
{
parent::__construct($test);
if (is_integer($timesRepeat) &&
$timesRepeat >= 0) {
$this->timesRepeat = $timesRepeat;
}
}
public function count()
{
return $this->timesRepeat * $this->test->count();
}
public function run(PHPUnit_Framework_TestResult $result = NULL)
{
if ($result === NULL) {
$result = $this->createResult();
}
for ($i = 0; $i < $this->timesRepeat && !$result->shouldStop(); $i++) {
$this->test->run($result);
}
return $result;
}
}
?>
~~~