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

迷惘的码农。

文章分类

全部博文(132)

文章存档

2013年(1)

2011年(2)

2010年(9)

2009年(41)

2008年(79)

我的朋友

分类:

2008-03-25 10:44:13

第 1 章 自动化测试

再好的程序员也会犯错.程序员的好坏区别在于,好的程序员尽可能早地利用测试检测错误所在。越早测试,发现错误的机会越大,发现和修正的代价就越小。这解 释了为什么在软件发布前才进行测试会有那么多问题。大多数错误都未被发现,而且修正已发现错误的代价如此之大,以至于你必须有选择地进行处理,因为根本不 可能全部修复。

使用PHPUnit进行测试与你曾经的做法并非完全不同。它只是在操作方式上有所不同。区别在于测试执行成套测试,前者检查程序行为是否符合预期,后者是可运行的代码片断,它们自动测试软件各部分(单元)的正确性。这些可运行的代码片断称为单元测试。

本章我们从简单的基于print的测试代码开始,到完整的自动化测试(结束)。假设要我们测试PHP内建的array。一个要测试的功能是函数sizeof()。对于新建的数组,我们期望sizeof()函数返回0。假如一个元素后,sizeof()应该返回1。是我们要测试的(代码)。

范例 1.1: 测试数组和sizeof()


$fixture = array();
// $fixture应该为空。
 
$fixture[] = 'element';
// $fixture应该含有一个元素。
?>

检查我们是否得到预期结果的简单方法是在增加元素前后显示sizeof()的结果(见)。如果先后得到01arraysizeof() 行为符合预期。

范例 1.2: 使用print测试数组和sizeof()


$fixture = array();
print sizeof($fixture) . "\n";
 
$fixture[] = 'element';
print sizeof($fixture) . "\n";
?>
0
1

现在,我们要把需要人工解释(结果)的测试变为自动运行的测试。在中,我们把预期值和实际值的比较写入测试代码,如果相同就输出ok。一旦看到not ok消息,我们就知道有错误。

范例 1.3: 比较预期值和实际值以测试数组和sizeof()


$fixture = array();
print sizeof($fixture) == 0 ? "ok\n" : "not ok\n";
 
$fixture[] = 'element';
print sizeof($fixture) == 1 ? "ok\n" : "not ok\n";
?>
ok
ok

现在我们把预期值和实际值得比较提取出来,放入一个函数,它会在存在差异时扔出一个异常。()。这有2个好处:编写测试变得更容易,而且只在出错时产生输出。

范例 1.4: 使用断言函数测试数组和sizeof()


$fixture = array();
assertTrue(sizeof($fixture) == 0);
 
$fixture[] = 'element';
assertTrue(sizeof($fixture) == 1);
 
function assertTrue($condition)
{
    if (!$condition) {
        throw new Exception('Assertion failed.');
    }
}
?>

现在测试完全自动化了。相对于我们的第一版测试,该版已是自动化测试

使用自动化测试的目的是少犯错。即使有了极好的测试,你的代码仍不理想,一旦开始自动化测试,你将会发现缺陷明显减少。自动化测试确保你的代码的可信性。 这种可信性使你可以在设计上做出更大胆的跨越(重构),同队友合作得更好(跨团队测试),改善同客户的关系,并且每晚安心回家,因为(事实)证明你的努力 使系统比以前更好了。

阅读(2062) | 评论(0) | 转发(0) |
0

上一篇:前言目录等

下一篇:第 2 章 PHPUnit的目标

给主人留下些什么吧!~~