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

迷惘的码农。

文章分类

全部博文(132)

文章存档

2013年(1)

2011年(2)

2010年(9)

2009年(41)

2008年(79)

我的朋友

分类:

2008-04-07 09:35:44

第 18 章 框架(Skeleton)生成器

当你为现存代码编写测试时,你不得再三地编写类似

public function testMethod()
{
}

一样的相同的代码片断。PHPUnit能通过分析现存的类代码并为它生成一个测试用例类的框架来提供帮助。

范例 18.1: 计算器类


class Calculator
{
    public function add($a, $b)
    {
        return $a + $b;
    }
}
?>

下面的例子显示如何为名为Calculator(见范例 18.1)的类生成测试类框架。

phpunit --skeleton Calculator
PHPUnit 3.2.10 by Sebastian Bergmann.

Wrote test class skeleton for Calculator to CalculatorTest.php.

对于原始类中的每个方法,在生成的测试用例类中会对应地存在一个未实现的测试用例(见)。

下面是运行生成的测试用例类的输出。

phpunit --verbose CalculatorTest
PHPUnit 3.2.10 by Sebastian Bergmann.

CalculatorTest
I


Time: 0 seconds

There was 1 incomplete test:

1) testAdd(CalculatorTest)
This test has not been implemented yet.
/home/sb/CalculatorTest.php:54

OK, but incomplete or skipped tests!
Tests: 1, Incomplete: 1.

注解

你可在方法的文档块中使用@assert注解自动地生成简单却有意义的测试来代替未完成的测试用例。范例 18.2显示一个例子。

范例 18.2: 带@assert注解的计算器类


class Calculator
{
    /**
     * @assert (0, 0) == 0
     * @assert (0, 1) == 1
     * @assert (1, 0) == 1
     * @assert (1, 1) == 2
     */
    public function add($a, $b)
    {
        return $a + $b;
    }
}
?>

原始类中的每个方法都进行@assert注解的检测。这些被转变为测试代码,像这样

    /**
* Generated from @assert (0, 0) == 0.
*/
public function testAdd() {
$o = new Calculator;
$this->assertEquals(0, $o->add(0, 0));
}

下面是运行生成的测试用例类的输出。

phpunit CalculatorTest
PHPUnit 3.2.10 by Sebastian Bergmann.

....

Time: 0 seconds


OK (4 tests)

显示受支持的@assert注解的各种变体以及它们被如何转变为测试代码。

表 18.1 受支持的@assert注解的各种变体

注解转变为
@assert (...) == XassertEquals(X, method(...))
@assert (...) != XassertNotEquals(X, method(...))
@assert (...) === XassertSame(X, method(...))
@assert (...) !== XassertNotSame(X, method(...))
@assert (...) > XassertGreaterThan(X, method(...))
@assert (...) >= XassertGreaterThanOrEqual(X, method(...))
@assert (...) < XassertLessThan(X, method(...))
@assert (...) <= XassertLessThanOrEqual(X, method(...))
@assert (...) throws X@expectedException X

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