PHPUnit3.7 学习笔记 第一章 自动化测试(转译www.phpunit.de)

第一章 自动化测试

 

    即使再好的程序员也难免会写出有问题的代码。而一个好的程序员和一个糟糕的程序员之间的区别就是,好的程序员会用测试尽可能快的发现问题,并去解决它们。 越早去针对错误去检查,就有越容易找到错误,避免将来花费太大的成本来找到这个错误。这就解释了,为什么在发布版本前没有经过测试,是多么的让人惴惴不 安。不经过测试很多错误根本不会被捕获,并且在我们没法解决所有错误的时候,决定先解决哪些错误,并去找到这些错误并解决的成本是非常之高。

    用PHPUnit做测试和我们之前做的测试并不是完全不一样。只是用不同的方法去做测试。两者的不同在于,按预期检测程序的结果,执行一连串的测试,自动测试可运行代码片段的正确性使用软件进行的。这些可运行的代码我们称之为单元测试。

    这一章我们将从一个简单的打印测试到一个完整的自动化测试进行逐步讲解。假设我们我被要求检测PHP的内置数组。测试功能函数中的一个方法 count().例如,新建一个数据,我们预期count()方法将返回0,然后我们增加了一个元素,它将返回1。示例1.1中我们将去测试

 

Example 1.1: 测试数组操作

<?php
$fixture = array();
// $fixture is expected to be empty.

$fixture[] = 'element';
// $fixture is expected to contain one element.
?>
一个很简单方法去就是在给数组添加元素前后打印count(),连检测是否获得我们预期的结果。(见示例1.2)。如果我们先得到0,然后得到1,那么count()的结果就是我们所预期的。 

Example 1.2: 用答应测试数组操作

<?php
$fixture = array();
print count($fixture) . "\n";

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

 

现在,我们将从人工测试转移到能够按要求自动测试。在示例1.3,中,我们把预期和实际结果的比较写进了测试代码,并且如果这两个值是相等我们就打印OK。如果我们看到的信息不是OK,那么我就知道这个测试就是有问题的。

Example 1.3: 比较预期和真实值去测试数组操作

<?php
$fixture = array();
print count($fixture) == 0 ? "ok\n" : "not ok\n";

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


我们现在将预期与实际值的比较作为一个参数,封装为一个异常函数。这样做给我们提供了两个好处,一个就是写测试将更加容易,另一个就是我们当一个出错的时候我们能获得输出。

 

Example 1.4: 用一个申明的函数来测试数组操作

<?php
$fixture = array();
assertTrue(count($fixture) == 0);

$fixture[] = 'element';
assertTrue(count($fixture) == 1);

function assertTrue($condition)
{
if (!$condition) {
throw new Exception('Assertion failed.');
}
}
?>
这个测试现在时完全自动的了。是用我们自动测试的版本取代了我们第一版做的测试。
用自动测试的目的是更少的出错。当你的代码还不是完美的时候,一旦你用开始使用自动测试,你将很惊喜的发现缺陷将戏剧性的减少。自动测试能让你的代码更加自信。你能用这份自信做跟多的大胆系统重构,让你们的团队关系根据更加友好,特别是跨团队测试的时候,也能改善你们喝客户的关系,并且晚上回家前你也有你的系统因为你的努力,比早上更加完善的证据。
posted @ 2014-10-15 15:03  b13272012771  阅读(332)  评论(0编辑  收藏  举报