来自百度百科……
“PHPUnit是一个轻量级的PHP测试框架。它是在PHP5下面对JUnit3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计)。
单元测试是几个现代敏捷开发方法的基础,使得PHPUnit成为许多大型PHP项目的关键工具。这个工具也可以被Xdebug扩展用来生成代码覆盖率报告 ,并且可以与phing集成来自动测试,最后它还可以和Selenium整合来完成大型的自动化集成测试。”
简单来讲,使用PHPUnit的目的,就是在测试代码的时候,设置好检测点,检测方法和结果比对方式,进行大量的自动的代码测试。以下面这个例子说明:
assertEquals(0, sizeof($fixture));
}
public function testArrayContainsAnElement() {
/* Create the Array fixture*/
$fixture = array();
/*Add an element to the Array * fixture*/
$fixture[] = ‘Element’;
/*Assert that the size of the * Array fixture is 1*/
$this->assertEquals(1, sizeof($fixture));
}
}
?>
里面定义了一个测试点,测试Array的功能,两个测试方法:为空和为一个元素的时候;结果比对就是数组的大小,为空=0,一个元素=1. 这样使用phpunit ArrayTest就可以进行自动的测试,并给出测试结果。
要点:
1 编写的测试用例是一个php脚本
2 require_once ‘PHPUnit/Framework.php’是必须的,另外,你需要在测
试用例脚本中包含你需要测试的代码
3 测试用例的主体必须写在类中,类名必须和文件名保持一致,还必须是
PHPUnit_Framework_TestCase的子类
4 每一个测试用例都是一个public的成员函数,必须以test开头
5 程序的输出使用assert*系列函数来进行验证
该用例需要在Shell下键入phpunit ArrayTest.php来运行。结果如下示:
[username@machine xx]$ phpunit ArrayTest.php
PHPUnit 3.1.3 by Sebastian Bergmann.
..
Time: 0 seconds
OK (2 tests)
结果中点号代表一个用例通过(即assert系列函数都通过)。如果将上面的测试用例testArrayContainsAnElement用例assertEquals函数中的1改为0,则运行结果为:
PHPUnit 3.1.3 by Sebastian Bergmann.
.F
Time: 0 seconds
There was 1 failure:
1) testArrayContainsAnElement(ArrayTest)
Failed asserting that matches expected value .
/home/wiki/apache/htdocs1.5.0/ArrayTest.php:29
FAILURES!
Tests: 2, Failures: 1.
可以很明显看出结果由原来的 .. 变为 .F ,F表示第二个测试用例未通
过,并且具体与哪一条验证不符都在后有详细说明。
除了F外,一个测试用例还有I(未完成),S (跳过),E (错误)三种状态
高级的一些用法比如:依赖关系和数据提供者大家可以百度学习,其实也不太用到
还有一些比如测试异常的方式,可以用:
try catch + fail法
public function testException() {
try {
// 这里写上会引发异常的代码
} catch (InvalidArgumentException $expected) {
// 抓到异常测试通过
return ;
}
// 没抓到异常就算失败
$this->fail(‘An expected exception has not been raised.’ );
}
常用的assert****
assertEquals(array $expected, array $actual[, string $message = ”])
断言数组$actual和数组$expected相同
assertFalse(bool $condition[, string $message = ”])
断言$condition的结果为false
assertTrue(bool $condition[, string $message = ”])
断言$condition为True,否则就报告错误
其他的话,其实都可以用assertEquals替代来写,实际应用实际操作吧。
其实做测试主要还是设计的考虑和边界值的选取等。